ReactJs:如何更新state的属性

时间:2015-07-05 15:27:26

标签: javascript reactjs

我正在尝试为状态中存储的一行数据更新isSelected属性,该属性没有更新任何人都可以告诉我最好的方法吗?

        var selectedIdsPush = [];
        var selectedIdsPush = this.state.contacts.slice();
        for(var i=0;i<selectedIdsPush.length;i++)
        {
            var idAsNumber = parseInt(id);

            if (page.state.contacts[i].id === idAsNumber) {
                page.state.contacts[i].isSelected = true;
                break;
            }

        }

2 个答案:

答案 0 :(得分:4)

Reacts希望消费者setState而不是直接分配属性。在此示例中,我们可以使用以下命令构建和分配新的contacts列表:

var idAsNumber = parseInt(id);
var newContacts = this.state.contacts.map(function (contact) {
  if (contact.id === idAsNumber) {
    contact.isSelected = true;
  }
  return contact;
});

this.setState({ contacts: newContacts });

答案 1 :(得分:1)

该属性可能确实已更新,但由于您的应用未重新呈现,因此不会反映在用户界面中。

您可以致电this.forceUpdate()强制重新呈现https://facebook.github.io/react/docs/component-api.html#forceupdate

或者您更有可能使用this.setState()https://facebook.github.io/react/docs/component-api.html#setstate

我目前在使用状态的时间/地点很困难,因为显然不建议这样做。搜索react avoid state以获取更多信息。