2 回答
TA贡献1863条经验 获得超2个赞
首先这里有一个很大的概念错误:
if (this._tarefaInput.value !== ""){
state.list.push({ text: this._taskInput.value });
this.setState(state);
}
您正在使用该推送功能直接编辑状态,您不应该在反应中这样做,因为它会导致意想不到的后果,这就是您应该如何更新状态:
if (this._tarefaInput.value !== ""){
//use the spread operator (...) to create a copy of the list in the state
const newList = [... state.list];
// push the new element tot the new list
newList.push({ text: this._taskInput.value });
// update the state
this.setState({list: newList});
}
现在你得到的错误很可能发生,因为在你的代码中的某个地方(可能在里面<Table/>)你试图将列表数组的每个元素打印为一个反应组件。您尚未共享列表呈现的部分,但我猜您正在做这样的事情:
//somewhere inside a render:
{
list.map(Element => <Element />);
}
//Proper way of doing it
{
list.map(element => <p>{element.text}</p>);
}
如果您共享更多代码和带有错误描述的整个日志(带有文件和行号),我可以尝试提供更多帮助
TA贡献1963条经验 获得超6个赞
问题是您的渲染中的这一行:{this.state.list}
。你可以渲染一个数组,但你不能渲染一个对象。解决方案是映射数组并输出一些 JSX,如下所示。假设您有一个具有 aname
和id
属性的对象列表:
{this.state.list.map(item => (<div key={item.id}>{item.id}</div>))}
添加回答
举报