组件的子项不应该发生变异

时间:2016-09-26 17:40:28

标签: javascript reactjs redux react-redux

我有一个react-redux个应用。我通过Redux商店的AJAX部分获取数据。这部分看起来像这样:

    counts: {
        warning: 0,
        new: 0,
        in_hands: 0,
        completed: 0,
        rejected: 0
    }

更改此值后,React呈现组件

render() {

        var counts = [
            {
                id: 'warning',
                count: parseInt(this.props.counts.warning),
                name: 'Внимение'
            },
            {
                id: 'new',
                count: parseInt(this.props.counts.new),
                name: 'Новые'
            },
            {
                id: 'in_hands',
                count: parseInt(this.props.counts.in_hands),
                name: 'В работе'
            },
            {
                id: 'completed',
                count: parseInt(this.props.counts.completed),
                name: 'Выполн.'
            },
            {
                id: 'rejected',
                count: parseInt(this.props.counts.rejected),
                name: 'Отменен.'
            }
        ];

    content = (<div className="inside-loader"/>);

    return(
        <div>
        <Tabs key="tabs_order-list" id="order-list" items={counts} defaultTab="warning" changeList={this.changeList} content={content}/></div>
    )
}

Tabs组件中我们可以看到:

render() {
        let self = this;
        let items = this.props.items.map(function (item, index) {
            return <div key={self.props.id+'_'+index} onClick={self.changeTab.bind(null, item.id)} className={'bar-tabs__tab ' + (self.state.openedTabId == item.id ? 'active' : '')}>
                <b>{item.count}</b>
                <span>{item.name}</span>
            </div>
        })
        return <div>
            <div className={'bar-tabs bar-tabs__' + this.props.id}>{items}</div>
            <div className={'bar-tabs-content bar-tabs-content__' + this.props.id}>
                <div className='bar-tabs-content__tab active'>{this.props.content}</div>
            </div>
        </div>
    }

但是,在控制台中我看到了:

screen of console

我读到了类似的问题,我理解当我尝试更改props值时会出现此警告。但我没有更改props值。

1 个答案:

答案 0 :(得分:13)

您是否肯定所有count都是有效数字?您应该console.log第一个counts中的render()数组,并检查数组的每个对象中的count值都不是NaN。如果其中任何一个是NaN,则可能与此问题有关:https://github.com/facebook/react/issues/7424

只需检查一下您的数据是否正确,并且NaN之后就没有parseInt。{/ p>