Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 React派生组件不会在状态更改时更新_Javascript_Reactjs_State - Fatal编程技术网

Javascript React派生组件不会在状态更改时更新

Javascript React派生组件不会在状态更改时更新,javascript,reactjs,state,Javascript,Reactjs,State,我是一个新的反应,这更像是一个概念性的问题,而不是具体的编程 我有一个主组件,它有3个子组件。称它们为A,B,C。A是一个图形,B是一个图像,C是一组无线电按钮X,Y,Z。有一个与C相关的状态,默认为{buttonSelected:Y} 加载主组件时,将从render调用函数PreparedAthis.state.buttonSelected。此函数将准备在图形和图像中显示所需的所有数据,然后填充对象上的数据并返回对象。主组件返回中的所有图形和图像都是使用此返回对象创建的,并且组件成功加载 现在

我是一个新的反应,这更像是一个概念性的问题,而不是具体的编程

我有一个主组件,它有3个子组件。称它们为A,B,C。A是一个图形,B是一个图像,C是一组无线电按钮X,Y,Z。有一个与C相关的状态,默认为{buttonSelected:Y}

加载主组件时,将从render调用函数PreparedAthis.state.buttonSelected。此函数将准备在图形和图像中显示所需的所有数据,然后填充对象上的数据并返回对象。主组件返回中的所有图形和图像都是使用此返回对象创建的,并且组件成功加载

现在,当我再次单击radiobutton X时,prepareDatathis.state.buttonSelected将使用render中的正确X值调用,它还将返回填充有图形和图像的正确数据的对象。但图形和图像不会使用新值重新渲染

这是因为创建图形和图像的数据未处于状态吗?是否每个需要重新渲染的部分都应该与道具或状态关联,并且从另一个状态派生的数据不会重新渲染

编辑:添加了伪代码

const prepareData = buttonSelected => {
   <chart data and image preparation based on buttonSelected >
   object.chartdata, object.imagedata = <prepared data>
   return object
}

class MainComponent extends Component {
   constructor(){
      this.state = {buttonSelected: "Y"}
   }

onButtonClick(c){ 
   this.setState({buttonSelected: c})
}
render(){ 
   returnData = prepareData(this.state.buttonSelected)
   return (
   <JSX using retrunData>
   <...... onClick ={() => this.onButtonClick("Y") >
   <Chart data = {returnData.chartdata} />
   <Image source={returnData.imagedata} />

}

你的假设是正确的

组件状态更改时会触发渲染。状态可以从道具更改或直接设置状态更改更改。之后,根据更新的状态作出反应,决定是否重新渲染


在您的情况下,在调用prepareData后,道具和状态不会改变。

您可以共享prepareData功能吗?即使只是pseudocode@sme我添加了伪代码。请检查。图像和图形组件是否从PureComponent扩展而来?他们在shouldComponentUpdate中引入了任何逻辑吗?是的,他们是纯的,图形是react-chartjs2图像只是一个图像,源代码来自prepareData。没有实现shouldComponentUpdate。感谢回复。所以这里我需要将图像源和图表数据放在状态中,并调用setState来更改数据,而不是返回对象并使用它来准备数据?为此,我需要将prepareData函数引入类本身。我说的对吗?但是在我调用prepareData之后,图表和图像的道具正在改变。您能检查一下上面伪代码中最后添加的两行吗。这仍然不会更新组件。将returnData=PreparedAthis.state.buttonSelected移出渲染,并将其置于OnButton下单击This.setState{returnData},然后从渲染访问它,例如This.state.returnData.chartdata