reactjs 单击按钮时更改状态的问题

velaa5lx  于 2023-01-08  发布在  React
关注(0)|答案(4)|浏览(147)

我遇到了一个无法解决的问题。在我正在进行的一个项目中,当我点击一种颜色时,T恤的颜色应该会改变,但同时我得到了一个error。我真的需要帮助。https://github.com/ewaolczak/product-personalizer/commit/a70ad00e360bc96de28c32e27c9c8ee9b9626a6a?w=1
我已经把课程材料读了好几遍,在网上搜索了解决方案,仍然不知道错误在哪里。

4ioopgfo

4ioopgfo1#

OptionColor.js的第25行,您尝试从props访问setCurrentColor(),这很可能是抛出错误的地方,这是因为在Product.js的第73行,使用<OptionColor>组件,您没有传入名为“setCurrentColor”的prop,它等于一个函数。
为了解决这个问题,我认为您应该在Product.js的第73行执行以下操作:

<OptionColor colors={props.colors} setCurrentColor={setCurrentColor} />
roqulrg3

roqulrg32#

在OptionColor.js文件中,你调用了props.setCurrentColor(color),但是这个函数并不存在,因为父文件没有定义属性。
在Product.js文件中,添加以下内容:

<OptionColor
    colors={props.colors}
    setCurrentColor={setCurrentColor}
  />
jgzswidk

jgzswidk3#

出现错误的原因:
OptionColor组件中,代码描述了每当单击按钮时,它将调用props.setCurrentColor(whatever-color),如下所示:

<button onClick={() => props.setCurrentColor(color)}></button>

这是告诉React调用传入组件的setCurrentColor参数,问题是,Product组件没有传入setCurrentColor函数,只传入了colors数组。

<OptionColor colors={props.colors} />

要修复:
Product组件中的OptionColor用法更改为:

<OptionColor colors={props.colors} setCurrentColor={setCurrentColor} />

OptionColor提供一种更改其父级状态的方法。

8yparm6h

8yparm6h4#

这是您的OptionColor.js

import React from 'react';
import styles from './OptionColor.module.scss';
import shortid from 'shortid';
import clsx from 'clsx';

const OptionColor = (props) => {
  const prepareColorClassName = (color) => {
    return styles[
      'color' + color[0].toUpperCase() + color.substr(1).toLowerCase()
    ];
  };

  return (
    <div className={styles.colors}>
      <h3 className={styles.optionLabel}>Colors</h3>
      <ul className={styles.choices}>
        {props.colors?.map((color) => (
          <li key={shortid()}>
            <button
              type='button'
              className={clsx(
                prepareColorClassName(color),
                props.currentColor === color ? styles.active : undefined
              )}
              onClick={() => props.setCurrentColor(color)}></button>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default OptionColor;

<li>的底部是这一行,它试图调用一个setCurrentColor,这个函数没有传递给组件(它是未定义的):

onClick={() => props.setCurrentColor(color)}></button>

溶液

在Product.js中,更改:

<OptionColor colors={props.colors} />

收件人:

<OptionColor colors={props.colors} setCurrentColor={setCurrentColor} />

相关问题