React native 将对象添加到数组并刷新截面列表

React native 将对象添加到数组并刷新截面列表,react-native,react-native-sectionlist,React Native,React Native Sectionlist,我添加了一个新的联系人对象,并试图在SectionList中显示它。但当我试图将一个对象放入数组时,我得到了一个错误:TypeError:undefined不是一个对象(计算'n.data.length') 我使用此链接中的说明来解决问题。 {item} /> 我认为问题在于错误的箭头函数语法。试试这个 this.setState(state => { return {contacts: [...state.contacts, newContact]}; }); 您没有正确使用

我添加了一个新的联系人对象,并试图在SectionList中显示它。但当我试图将一个对象放入数组时,我得到了一个错误:TypeError:undefined不是一个对象(计算'n.data.length')

我使用此链接中的说明来解决问题。

{item}
/>

我认为问题在于错误的箭头函数语法。试试这个

this.setState(state => {
    return {contacts: [...state.contacts, newContact]};
});

您没有正确使用链接的解决方案。缺少包装支架

this.setState(state => ({
  contacts: [...state.contacts, newContact]
}));
我想你可以穿短一点

this.setState({ contacts: [...this.state.contacts, newContact] });
我想补充一点

this.refreshContactsList = this.refreshContactsList.bind(this);

不需要,因为
refreshContactList
是一个箭头函数,并且您不会丢失
内部的该
指针。如果您将其声明为
refreshContactList(){…}
您需要绑定

最后我找到了正确的语法:

refreshContactsList = () => {
    const newContact = {data: [{name:this.state.contactName, phone:this.state.contactPhone}]};
    this.setState({ contacts: [...this.state.contacts, newContact]})
  }

当=>符号后面有一个大括号时,它会将其视为函数体,而不是将其作为对象返回。谢谢您的回复。但是现在我得到一个错误:TypeError:undefined不是一个对象(计算'n.data.length')。我想我不需要归还任何东西,因为设置状态正在进行工作。你是对的,我已经更正了。但是现在我得到一个错误:TypeError:undefined不是一个对象(评估'n.data.length')你能在
setState
之前记录
this.state.contacts
吗?请删除
newContact
属性名的单引号(
):)我想我的问题是contacts声明。我对this.state.contacts(console.log对我不起作用)发出了警报,它重新启动了我的应用程序(我正在使用expo)。在
this.setState({contacts:[…this.state.contacts,newContact]})中放置新联系人时出现问题
因为contacts是objects的数组ice:)所以这是一件需要添加
数据
属性的事情?
this.setState({ contacts: [...this.state.contacts, newContact] });
this.refreshContactsList = this.refreshContactsList.bind(this);
refreshContactsList = () => {
    const newContact = {data: [{name:this.state.contactName, phone:this.state.contactPhone}]};
    this.setState({ contacts: [...this.state.contacts, newContact]})
  }