Javascript React派生组件不会在状态更改时更新
我是一个新的反应,这更像是一个概念性的问题,而不是具体的编程 我有一个主组件,它有3个子组件。称它们为A,B,C。A是一个图形,B是一个图像,C是一组无线电按钮X,Y,Z。有一个与C相关的状态,默认为{buttonSelected:Y} 加载主组件时,将从render调用函数PreparedAthis.state.buttonSelected。此函数将准备在图形和图像中显示所需的所有数据,然后填充对象上的数据并返回对象。主组件返回中的所有图形和图像都是使用此返回对象创建的,并且组件成功加载 现在,当我再次单击radiobutton X时,prepareDatathis.state.buttonSelected将使用render中的正确X值调用,它还将返回填充有图形和图像的正确数据的对象。但图形和图像不会使用新值重新渲染 这是因为创建图形和图像的数据未处于状态吗?是否每个需要重新渲染的部分都应该与道具或状态关联,并且从另一个状态派生的数据不会重新渲染 编辑:添加了伪代码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。此函数将准备在图形和图像中显示所需的所有数据,然后填充对象上的数据并返回对象。主组件返回中的所有图形和图像都是使用此返回对象创建的,并且组件成功加载 现在
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