我正在开发一个需要异步获取一些数据并将状态保存在父组件中但还将数据引用传递给子组件的应用程序。问题是一旦在状态中加载数据,道具就不会更新到新状态。我怎样才能使它在父状态更改时自动更新道具?
这是我的代码:
class App extends Component {
state = {
contract: null,
ethereum: null,
user: null
};
componentDidMount() {
let ethereum = window.ethereum || null;
this.setState({ ethereum });
}
getContainerClasses() {
let classes = "container";
classes += this.state.ethereum === null ? " invisible" : "";
return classes;
}
render() {
return (
<React.Fragment>
<Nav />
<div className={this.getContainerClasses()}>
<Intro ethereum={this.state.ethereum} />
<Load />
<Deploy />
</div>
</React.Fragment>
);
}
}
class Intro extends Component {
constructor() {
super();
this.handleClick = this.handleClick.bind(this);
}
render() {
return (
<React.Fragment>
...
</React.Fragment>
);
}
handleClick() {
console.log(this.props.ethereum);
}
getContainerClasses() {
let classes = "container";
classes += this.props.ethereum !== null ? " " : "";
return classes;
}
}
正如您在我的示例中看到的那样,我正在尝试登录this.props.ethereum
按钮单击。不幸的是,它不会注销App
组件中可访问的数据(在 Chrome React 工具中可见)。
编辑:
我误读了我的日志。道具正在更新,但getContainerClasses()
状态更改时不会触发。
基本上我想要做的是在数据尚未加载时隐藏内容并尽快显示它。