【问题标题】:Access an object from componentDidMount()从 componentDidMount() 访问对象
【发布时间】:2025-11-29 19:20:08
【问题描述】:

我在componentDidMount() 中调用了以下库,它成功返回了一个对象。

  componentDidMount() {
      var objData =call.MyLibStart('12121', this);
}

现在我需要在render() 部分使用objData。我还需要访问objData 的某些属性,例如objData.

 render() {
//I need the object.postate here
}

如何访问那里的对象?在这里使用状态是个好主意吗?

【问题讨论】:

    标签: javascript react-native


    【解决方案1】:

    您可以像@3Dos 的回答一样访问该对象。如果要修改objData 的值,则将其用作状态。如果您只想渲染该对象或获取值以检查某些内容,那么类属性就足够了。

    确保您以正确的方式获取对象:

    componentWillMount () {
      this.objData = Object.assign({}, call.MyLibStart('12121', this))
      console.log('objData: ', this.objData) // inspect the object in debugger to check it's keys
    }
    

    componentDidMount 的原因是它只在render 函数之后运行。您的应用流程如下所示:

    1. constructor():this.objData = null
    2. render():this.objData = null
    3. componentDidMount():this.objData = some object

    此时渲染函数不会更新,因为它只会在您对状态进行一些更改时更新。由于this.objData 不是一个状态,所以它在render 中始终为空。因此,通过将componentDidMount 更改为componentWillMount,当render 被调用时,您的objData 不会为空。

    【讨论】:

    • 感谢您的回答。事实上,我需要这个:objData.feature1;
    • 刚好需要用到,不需要修改,所以不使用state。
    • 另外,根据上面的回答,'objData' 在 render() 函数中是未定义的。
    • 它再次给了我未定义。
    【解决方案2】:

    您想要的可能是在构造函数中设置一个实例变量,以便您可以在其他类方法中访问它,例如:

    class MyComponent extends Component {
      constructor (props) {
        super(props)
        this.objData = call.MyLibStart('12121', this)
      }
    
      render () {
        // Do whatever you like with this.objData
        return null
      }
    }
    

    【讨论】:

    • 感谢您的回答。我忘了说,我需要访问'objData'的一些属性。例如我需要 objData.activeSection。那里是未定义的。你能帮帮我吗?
    • 确定objData.activeSection 已定义? console.log(this.objData)componentDidMountrender 中输出什么?
    • 还要确保访问this.objData.activeSection而不是objData.activeSection
    • 又是未定义的! :(
    • 那么console.log 呢?你确定call.MyLibStart() 返回一个带有activeSection 属性的对象吗?
    【解决方案3】:

    除非您需要访问已安装的组件,否则您可以在构造函数中将其设置为初始状态:

    constructor(props) {
      super(props)
      this.state = {
        objData: call.MyLibStart('12121', this)
      }
    }
    render() {
      // use this.state.objData here
    }
    

    【讨论】:

    • 再次显示未定义。我也应该在构造函数中绑定它吗?
    • 提前感谢您的回答。