javascript - 当子属性更改时如何防止重新创建列表?

标签 javascript reactjs

我有一个名为 <Events events={Array} activeEventId={String} /> 的组件。 Events组件呈现 <Event event={Object} isActive={Bool} /> 的列表组件,例如

render () {
    let activeEventId,
        events;

    events = this.props.events;
    activeEventId = this.props.activeEventId;

    return <div>
        {events.map(function(event) {
            return <div key={event.id} >
                <Event event={event} isActive={event.id === activeEventId} />
            </div>;
        })}
        </div>;
}

改变activeEventId重新创建 Event 的整个列表每次都是。

如何更改仅 Event 的实现谁的isActive prop 已更改会重新渲染吗?

编辑:两者EventsEvent组件是纯粹的,因为它们只依赖于它们的 props,根本不使用状态。

最佳答案

您可以将 event 对象和 activeEventId 值作为 props 传递给 Event 组件。然后你可以实现 shouldComponentUpdate 来检查它是否应该重新渲染。

shouldComponentUpdate: function(nextProps, nextState){
    //check if activeEventId changed
    return nextProps.activeEventId != this.props.activeEventId
}

关于javascript - 当子属性更改时如何防止重新创建列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34178260/

相关文章:

javascript - 在导航栏附近插入文本(菜单)

php - 如何存储多维表单数据?

javascript - collection.map 不是 Promise.all.then 的函数

javascript - React-router v4 - 无法获取 *url*

reactjs - GraphQL 查询仅显示原始结果

javascript - React js中ajax调用后该列消失

javascript - WebStorm:将直接返回箭头函数转换为多行箭头函数

javascript - 带笔画的 Highcharts 饼图

reactjs - 父功能组件中的子项不会因 Prop 更改而重新渲染

javascript - useEffect 触发并运行打印语句但没有实际的 axios.post 调用运行 reactjs