Javascript 渲染前使用setState()设置状态?
是的,我知道以前有人问过这个问题,但实际上按照建议去做对我来说是行不通的 因此,在运行render()方法(在父级中)之前,必须运行以下方法,因为我需要为Google图表和一些复选框准备大量数据 如下所示,在名为Javascript 渲染前使用setState()设置状态?,javascript,reactjs,Javascript,Reactjs,是的,我知道以前有人问过这个问题,但实际上按照建议去做对我来说是行不通的 因此,在运行render()方法(在父级中)之前,必须运行以下方法,因为我需要为Google图表和一些复选框准备大量数据 如下所示,在名为parseTestData的函数中调用此函数: this.setState({ data: ..., levels: ..., ... ... }, }); 我遗漏了很多信息,因为我不被允许分享这一部分。因此,我从父构造函数调用函数parseTe
parseTestData
的函数中调用此函数:
this.setState({
data: ...,
levels: ...,
...
...
},
});
我遗漏了很多信息,因为我不被允许分享这一部分。因此,我从父构造函数调用函数parseTestData
:
constructor(props) {
super(props);
this.parseTestData();
}
但这样做告诉我:
无法对尚未安装的组件调用setState
环顾四周,建议似乎是这样做:
componentWillMount() {
this.parseTestData();
}
但事实上,这根本没有设定状态。所有依赖父级状态的子级现在都会获得未定义的道具
我该怎么办?读了你的帖子,我觉得你还没有反应过来 基本上,当状态改变时,React会检查任何视觉变化,并将它维护的虚拟DOM与DOM进行比较,然后呈现它 如果在构造函数中调用方法,它将检测视觉变化并尝试渲染,因此每次都会调用构造函数 如果要将道具从父代传递到子代,并且道具已连接到父代的状态,请确保具有默认状态 那么现在来回答你的问题: 家长
constructor(props){
super(props)
this.state = // set your state but don't ever change state here
.....
}
componentDidMount(){
this.parseTestData(); // componentWillMount will also work fine
}
render(){
return(
<Child arg={this.state.someArg} />
)
}
是的,您不能在构造函数中使用此.setState()方法。相反,您可以直接为状态赋值。请参阅下面的示例代码
constructor(props)
{
super(props);
this.state = {
data:'',
levels: 2
}
}
我建议您定义并称之为this.parseTestData();在父类中执行setState,然后将状态传递给子类。我指的是当前有这个的子类。parseTestData()这个方法在父类中调用,任何来自父类的方法都将填充父类状态。孩子们将从父母那里得到他们的道具。所以我不完全确定你的意思。你的测试数据似乎是同步的,那么为什么不在构造函数中用
this.state={…}
设置它的初始状态,因为你可能使用的其他生命周期方法是componentDidMount
,static getDerivedStateFromProps
,componentdiddupdate
,请看一下@Icepickle,因为当我使用this.state
(我最初是这样做的)时,我收到了一系列关于不要直接改变状态的警告,而是使用setState()
。这是为了工作,所以我必须尽可能少地尝试,但这可能是不可避免的。在构造函数中,这应该是好的,但这实际上取决于您的测试数据是什么,您正在使用它做什么,以及它是否会在组件生命周期中更新。我是一个新的反应者。我必须通过工作中的反复试验来学习,因为我以前从未使用过它,但我知道JavaScript。所以这是一场艰苦的战斗。但是谢谢你。我将尝试使用以下内容继续前进:)还有一件事,在将函数传递给任何其他组件时,您需要将函数绑定到该组件
constructor(props)
{
super(props);
this.state = {
data:'',
levels: 2
}
}