【发布时间】:2021-08-26 09:20:31
【问题描述】:
有一个组件通过存储在状态中的数组进行映射。一个按钮,当它被点击时它会更新状态,这个动作是有效的。
问题是组件也没有更新。
代码如下:
const MyComponent = () => {
...
const [fields, setFields] = useState([{value: 'test', editable: false},
{value: 'test2', editable: false}]);
...
const toggleClass = (id) => {
const aux = fields;
aux[id].editable = true;
setFields(aux);
}
...
return (
<div>
...
{fields.map((field, id) => {
return (
<div>
<input className={field.editable ? 'class1' : 'class2'} />
<button onClick={() => toggleClass(id)}>click</button>
</div>
);
})}
</div>
);
我把日志和状态 (fields) 在点击后更新为可编辑 = true。但是 css 类没有改变。
这个问题有解决办法吗?
【问题讨论】:
-
你能检查状态是否正在更新。可以在useEffect中添加console.log
-
复制
fields,就像const aux = [...fields];一样。 React 需要不同的对象引用才能在非基元的情况下进行渲染。 -
不要改变状态。
标签: javascript html reactjs ecmascript-6 state