Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript } }_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript } }

Javascript } },javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,有一个非常简单的解决方案。React VDOM只是一种差分算法。JSX中唯一缺少的部分是名为key的东西,它类似于diffing算法使用并渲染特定元素的id。只需用一个键标记元素,如下所示 {number} 这不是要改变状态吗?另外,数组键是DB中的固定值。它改变了redux状态,是的,但我不认为状态变化是导致问题的原因。我怀疑在您的reducer中,当接收操作并计算myList时,您会强制React重新渲染所有内容,因为数组中的第一个和所有项都发生了更改。如果要追加有效负载,而不是预先追加有

有一个非常简单的解决方案。React VDOM只是一种差分算法。JSX中唯一缺少的部分是名为key的东西,它类似于diffing算法使用并渲染特定元素的id。只需用一个键标记元素,如下所示

  • {number}

  • 这不是要改变状态吗?另外,数组键是DB中的固定值。它改变了redux状态,是的,但我不认为状态变化是导致问题的原因。我怀疑在您的reducer中,当接收操作并计算
    myList
    时,您会强制React重新渲染所有内容,因为数组中的第一个和所有项都发生了更改。如果要追加
    有效负载
    ,而不是预先追加
    有效负载
    ,React可能能够更好地处理新数据。最初的问题是处理redux状态的正确方法。它只是做了一个浅拷贝(即使这些值是原语,而不是引用,所以它们无论如何都会传递)您可以找到一篇关于性能优化的非常好的文章。看起来您正确地使用了密钥,这使react能够了解哪些元素是新的,因此vDOM不应该重新呈现所有项目,而应该根据需要进行更新。@Reza能否请您签出我的详细答案,如果有不清楚的地方,那么请告诉我。如果没有
    PureComponent
    ,列表中的每个项目都将在添加新项目时重新提交。你可以玩我上面的例子。所以需要
    PureComponent
    。是的。我的错误。编辑了答案。谢谢,谢谢。我犯了一个错误,认为
    PureComponent
    与无状态组件相同。他们不是。一个
    PureComponent
    有额外的逻辑,它本质上包含一个更严格版本的
    shouldComponentUpdate
    return {
      ...state,
      myList: [ payload, ...state.myList.filter(item => payload.id !== item.id).slice(0, -1) ]
    }
    
    import React, { Component } from 'react';
    import MyRow from './MyRow';
    
    class MyList extends Component {
    
        render() {
    
            return (
    
            <div>
    
                {this.props.myList.map((list, index) => (
                    <MyRow key={list.id} data={list}/>
                ))}
    
            </div>
    
            );
        }
    }
    
    function select({ myList }) {
        return { myList };
    }
    
    export default connect(select)(MyList);
    
    import { PureComponent } from 'react';
    
    class MyRow extends PureComponent {
    
        render() {
    
        const data = this.props.data;
    
            return (
                <div>
                    {data.id} - {data.name}
                </div>
            );
    
        }
    }
    export default MyRow;
    
    myList: [ payload, ...state.myList.filter(item => payload.id !== item.id).slice(0, -1) ]
    
     myList: [ payload, ...state.myList.filter(item => payload.id !== item.id)]
    
    class MyList extends Component {
        render() {
            return (
                <div>
                    {this.props.myList.map((item, index) => (
                        <MyRow key={item.id} id={item.id} name={data.name} />
                        //or it's alternative 
                        <MyRow key={item.id} {...item} />
                    ))}
                </div>
            );
        }
    }
    
    //...
    
    class MyRow extends PureComponent {
        render() {
            const {id, name} = this.props;
            return (
                <div>
                    {id} - {name}
                </div>
            );
        }
    }
    
    <li key={number.toString()}>
        {number}   </li>