【问题标题】:Creating new state variables outside of constructor在构造函数之外创建新的状态变量
【发布时间】:2019-06-11 13:35:42
【问题描述】:

我正在尝试从已经是状态变量的数组中的数据中创建多个状态变量名称。所需的变量数量可能会因页面加载而异,因此我无法立即对其进行初始化

我在下面设置了一个函数,我认为它应该按照我的意图去做,但我不知道在组件中放置它的位置。

makeButtons() {
    this.state.Buttons.forEach((button) => {
        let key = button.fields.Label

        this.setState({ [key]: '' })
    }); 

}

我尝试在 render() 中调用它,但这只会给我一个无限循环错误,这是有道理的。有什么想法吗?

编辑:尝试调用 componentDidMount() 但这似乎也不起作用。不知道会有什么问题。代码如下

base('ButtonInfo').select({view: 'Grid view' }).eachPage(
            (Buttons, fetchNextPage) => {
                this.setState({
                    Buttons
                });
                fetchNextPage();
            }
        );
        this.state.Buttons.forEach((button) => {
            let key = button.fields.Label

            this.setState({ [key]: '' })
       }); 

编辑:答案在下面的 cmets 中,我需要在 api 调用之前添加 await 并使 componentDidMount() 异步。

【问题讨论】:

  • 应该触发创建新状态属性的事件是什么?是否有 API 调用、单击按钮或任何其他异步事件?
  • 我想在 API 调用后创建它们,获取它们所用的数组。 API 调用发生在 componentDidMount() 中并且工作正常

标签: reactjs create-react-app


【解决方案1】:

如何在 componentDidMount() 中做呢?该方法只在应用第一次渲染后调用一次,常用于应用一些数据初始化应用。

【讨论】:

  • 正在尝试,但似乎没有创建变量。我有下面的代码。我的格式有问题吗? base('ButtonInfo').select({view: 'Grid view' }).eachPage( (Buttons, fetchNextPage) => { this.setState({ Buttons }); fetchNextPage(); } ); this.state.Buttons.forEach((button) => { let key = button.fields.Label this.setState({ [key]: '' }) });
  • 代码看起来不错。进行 API 调用时是否使用 await?
  • 不,API 调用似乎工作正常,因为我可以使用 React 开发工具查看拉入的数据。如果我将 console.log('someString') 语句放在新的状态变量创建块周围,它们都会被记录,但不会生成变量。如果有意义的话,它似乎出于某种原因跳过了该块
  • 在API调用修复它之前添加等待,感谢您的帮助
猜你喜欢
  • 2012-01-23
  • 2012-11-10
  • 2012-06-30
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多