首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当状态发生变化时,支柱不会更新

当状态发生变化时,支柱不会更新
EN

Stack Overflow用户
提问于 2019-02-25 18:09:57
回答 1查看 153关注 0票数 0

我正在开发一个应用程序,该应用程序需要异步获取一些数据,并将状态保存在父组件中,但也需要将数据引用传递给子组件。问题是,一旦数据加载到状态,道具就不会更新到新的状态。如何使支持在父状态更改时自动更新?

这是我的密码:

代码语言:javascript
运行
复制
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>
    );
  }
}
代码语言:javascript
运行
复制
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工具中是可见的)。

编辑:,我误解了我的日志。道具正在更新,但是当状态发生变化时,getContainerClasses()不会被触发。

基本上,我要做的是隐藏内容,而数据还没有加载,并尽快披露它。

EN

回答 1

Stack Overflow用户

发布于 2019-02-25 18:18:00

可能组件挂载windows.ethereum的那一刻还没有定义。似乎ethereum是以asyn方式设置的,因此您的React组件不知道何时发生。在定义ethereum时,您必须添加一些事件侦听器来作出反应。可以在dev tools中看到正确的值,因为在那里您可以访问对象引用,因此您总是可以在dev工具中看到最新的值。

您可能使用了一些ethereum库,它应该包括一些API方法,允许在一切就绪并初始化时作出反应。下面是psedu代码,展示了如何实现它:

代码语言:javascript
运行
复制
 componentDidMount() {
    ethereum.addEventListener('ready', (ethereumObject) => this.setState({ethereum: ethereumObject}))
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54872269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档