Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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 - Fatal编程技术网

Javascript 组件问题

Javascript 组件问题,javascript,reactjs,Javascript,Reactjs,我有一个奇怪的问题。我正在使用父组件中的组件列表。基本上,我想改变一个道具和重置所有的子组件 这是我用来做这件事的代码 for (let i = 0; i < this.numOfNodes; i ++){ let idNum = 'a' + i; this.passNodes[i] = idNum; let num = Math.floor(Math.random() * this.numOfMeetings); this.

我有一个奇怪的问题。我正在使用父组件中的组件列表。基本上,我想改变一个道具和重置所有的子组件

这是我用来做这件事的代码

for (let i = 0; i < this.numOfNodes; i ++){
        let idNum = 'a' + i;
        this.passNodes[i] = idNum;
        let num = Math.floor(Math.random() * this.numOfMeetings);
        this.nodeMeeting[idNum] = this.meetings[num];
        let iid = this.passNodes[i];           
        this.nodes[i] = <Person infected = {false} reset = {true} id={iid} meeting={this.nodeMeeting[iid]} parentCallback = {this.callbackFunction} key={iid}/>                        
    }

    console.log(this.nodes[0])
    console.log(this.nodes)
for(设i=0;i
我遇到的这个问题是底部有两个log语句。对于第一个log语句,它将索引打印到列表中,在props中,reset为true,正如我所希望的那样

但是,在第二个log语句中,当我打印出整个this.nodes时,似乎它们中的每一个都没有更新,因为所有节点的reset仍然为false


我想知道是否可以得到一些帮助。

您的问题很可能是由于页面未重新呈现而导致的,因为您没有使用状态

使用状态,而不是像那样尝试更新组件,因为页面仅在更新/更改状态时重新呈现,请将该组件状态下的this.nodes指定为this.State.nodes,然后使用setState更新节点

示例代码

export default class Component extends React.Component{
     constructor(props){
        super(props);
       
        this.state = {
            nodes: []
        }
     }

     componentDidMount = () => {
         // You can use Axios or whatever you use for getting the data from the
         // Back-End
         getNodes(nodes => {
             // If I'm not wrong you should
             // Be able to modify directly this.state.nodes array
             // Then update it with this.setState()
             // If I'm wrong then just assign it to a variable
             // Though the variable is a reference to it, so it should work without
             // Using a variable
             for(let i = 0; i < this.state.nodes.length; i++){
                 // Your code
                 let idNum = 'a' + i;
                 this.passNodes[i] = idNum;
                 let num = Math.floor(Math.random() * this.numOfMeetings);
                 this.nodeMeeting[idNum] = this.meetings[num];
                 let iid = this.passNodes[i];           
                 // Modified part this.nodes -> this.state.nodes
                 this.state.nodes[i] = <Person infected = {false} reset = {true} id={iid} meeting={this.nodeMeeting[iid]} parentCallback = {this.callbackFunction} key={iid}/>                        
             }
             // If you're using a variable to make the modifications, use that instead
             // of this.state.nodes, so it'll be like this.setState({nodes: yourVar})
             this.setState({nodes: this.state.nodes});
         });
     }
}
导出默认类组件扩展React.Component{
建造师(道具){
超级(道具);
此.state={
节点:[]
}
}
componentDidMount=()=>{
//您可以使用Axios或任何用于从
//后端
getNodes(节点=>{
//如果我没有错的话,你应该
//可以直接修改此.state.nodes数组
//然后用这个.setState()更新它
//如果我错了,就把它赋给一个变量
//虽然变量是对它的引用,但它应该在没有
//使用变量
for(设i=0;ithis.state.nodes
this.state.nodes[i]=
}
//如果要使用变量进行修改,请使用该变量
//是this.state.nodes的,所以它将是这样的.setState({nodes:yourVar})
this.setState({nodes:this.state.nodes});
});
}
}
因此,基本上将this.nodes转换为State属性,然后通过使用setState更新State来更新它,它将重新呈现页面,很可能会解决您的问题

有关更多信息,请参阅