【问题标题】:Input value is read only in React component输入值在 React 组件中是只读的
【发布时间】:2020-04-03 06:01:37
【问题描述】:

我有多个颜色输入,它们以独特的颜色显示。他们从一个嵌套对象的助手那里获得他们的价值。当我尝试更新值时,什么也没有发生。我的最终目标是更改颜色输入,并将颜色应用于 css 变量,以便更改特定的语法突出显示颜色。

这是项目的codesandbox

【问题讨论】:

  • 请不要只链接到您的代码。尝试将解决问题所需的部分直接嵌入到问题中。有关如何改进问题的更多信息,请参阅How to ask 文章。

标签: javascript css reactjs state javascript-objects


【解决方案1】:

检查这里 https://codesandbox.io/s/react-heykm

像这样改变HexInput Onchange方法:

          onChange={ e => props.onChange(e, props.label)}

像这样更改 ColorPicker 道具

         <ColorPicker
              key={color}
              label={color}
              value={colorVal[color]}
              onChange={onColorChange}
            />

【讨论】:

    【解决方案2】:

    只需进行以下更改:

    在 ColorPickerSection.jsx 中

    function ColorPickerSection() {
      const [colorVal, setColorVal] = useState(colors);
    
      const onColorChange = (e, colorValKey) => {
        setColorVal({
          ...colors,
          [colorValKey]: e.target.value
        });
      };
    
      console.log(colorVal);
    
      return (
        <div>
          {Object.keys(colorSelect).map(groupName => {
            return (
              <div>
                <GroupName>{groupName}</GroupName>
                {Object.keys(colorSelect[groupName]).map(color => {
                  return (
                    <ColorPicker
                      key={color}
                      label={color}
                      value={colorVal[color]}
                      onColorChange={e => onColorChange(e, color)}
                    />
                  );
                })}
              </div>
            );
          })}
        </div>
      );
    }
    

    在 ColorPicker.jsx 中

    function ColorPicker(props) {
      return (
        <ColorPickerContainer>
          <p>{props.label}</p>
          <ColorSwatch
            type="color"
            value={props.value}
            onChange={props.onColorChange}
          />
          <HexInput
            type="text"
            value={props.value}
            onChange={props.onColorChange}
          />
        </ColorPickerContainer>
      );
    }
    

    【讨论】:

      【解决方案3】:

      ColorPicker.js - 在两个地方更改 ColorSwatchHexInput 组件。

      来自

      onChange={props.onColorChange}
      

      onChange={props.onChange}
      

      完成 ColorPicker.js

      return (
          <ColorPickerContainer>
            <p>{props.label}</p>
            <ColorSwatch type="color" value={props.value} onChange={props.onChange} />
            <HexInput
              type="text"
              value={props.value}
              onChange={props.onChange}
            />
          </ColorPickerContainer>
        );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-04
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 2020-09-24
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        相关资源
        最近更新 更多