javascript - React 状态变量在 render 方法中未定义

标签 javascript reactjs

我有一个状态变量dataSource,其中包含一些数据。

在父组件中,我有以下内容:

updateFeed = newItem => {
    this.setState({ dataSource: this.state.dataSource.data.unshift(newItem) })
    console.log(this.state.dataSource.data)
  }
  render() {
    console.log(this.state.dataSource.data)
    return (
      <React.Fragment>
        <Header />
        <Route
          path="/"
          exact
          component={props => (
            <Feed {...props} feedData={this.state.dataSource.data} updateFeed={this.updateFeed} />
          )}
        />
        <Route path="/profile/:id" exact component={props => <Profile {...props} />} />
      </React.Fragment>
    )
  }

updateFeed 从子组件中调用。

onSubmit = () => {
    const newPost = newData // some new data
    this.props.updateFeed(newPost)
  }

updateFeed 函数在提交时执行,console.log 提供更新的数据。但在渲染函数内部,this.state.dataSource.data未定义。我在这里缺少什么?

最佳答案

您在 setState 调用中执行了 dataSource: dataSource.data ,因此渲染方法中的 dataSource.data 实际上会访问 dataSource.data.data code> 这可能是未定义的。可以将 updatedFeed 更改为:

 updateFeed = newItem => {
    this.setState(prev => ({
       dataSource: {
           ...prev.dataSource,
           data: prev.dataSource.data.concat(newItem)
       }
    }));      
  }

这确保了纯净的状态。

关于javascript - React 状态变量在 render 方法中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989527/

相关文章:

javascript - 通量存储的动态初始化

javascript - Webpack:针对 html 和 js 文件不在同一文件夹中的项目的 output.path、publicPath 和 chunkFilename 选择概念

javascript - react |如何检测页面刷新(F5)

javascript - 错误消息 react : Uncaught TypeError: Cannot read property 'length' of undefined ()

javascript - 如何在 React with Enzyme 中测试在无状态组件上定义的内部函数

javascript - 如何简化这个基于 jQuery 标题的警报代码?

javascript - Webpack 找不到动态(js)添加的背景图片

javascript - 在一个菜单上指定功能效果的问题

javascript - Draft js 保存和渲染或显示内容

node.js - react 路由器将变量/状态传递给新路由?