如何将object类型的redux的store数据赋值给react的state

刚开始学习js,react,以及redux,在自己做练习,想把store的数据传入react的state,却怎么也不成功,还请各位指导一下。

想做的事:
将API取得的数据(比如论坛上的帖子内容)传入redux保存,再传给react组件显示到UI上
我是这样做的:

1.通过API取得了一些数据

{id: "111", title: "title1", body: "body1"}
{id: "222", title: "title2", body: "body2"}

2.在componentDidMount()中dispatch初始化数据用的action"iniPosts()",将数据传入reducer处理

【action.js】

export function iniPosts(posts) {
    return {
        type: INI_POSTS,
        posts
    }
}

【reducer.js】

function ourPosts(state = {}, action) {
    switch (action.type) {
        case INI_POSTS:
            const { posts } = action
            let temp = [...action.posts]
            return temp.map((item) => ({
                [item.id] : item
            }))

        default:
            return state
    }
}

我的数据现在调整成了这样:

reducer后的数据:
[111:{id: "111", title: "title1", body: "body1"}
222:{id: "222", title: "title2", body: "body2"}]

3.现在我想把这个数据原样传给react的state
想用connect的方法传递数据,但在mapStateToProps()中给posts赋值的结果总是空值

【APP.js】

function mapStateToProps({ ourPosts}) {

  console.log(ourPosts) // 这里可以看到reducer后的数据,是和期待一样的

  const temp = Object.keys(ourPosts).map(key => Object.assign({}, ourPosts[key]))
  temp.map((item) => ({
    [item.id]: item
  })) // 测试用
  console.log(temp) // 这里可以看到reducer后的数据,是和期待一样的

  return {
    posts: temp.map((item) => ({
      [item.id]: item
    }))
    // 这样传递写法不对么?但是死活想不明白为什么传不过去...
  }
}

function mapDispatchToProps(dispatch) {
  return {
    iniPosts: (data) => dispatch(iniPosts(data)), // dispatch传入APP是成功的,可以正常调用
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(App);

4.查看结果发现是空值:

【APP.js】
class App extends Component {

  constructor(props) {
    super(props);
    this.state = {
      posts: [],
    }
  }
...
  render() {
    const { posts } = this.state
    console.log(posts) // 调用完action之后,这里是空值 []
  }
}

PS:
自己也尝试了如下写法:

function mapStateToProps({ ourPosts}) {

  let a =  ourPosts;
  console.log(a) // 输出是reducer后的数据,和期待一样
  return {
    posts: a // 在render中只能看到空值[],后来换成 Object.assign(),但是也传不过去
  }
}

求教在mapStateToProps()中应该如何赋值

阅读 3.3k
1 个回答

使用mapStateToProps之后,就是将state映射到props上,用const { posts } = this.state不对吧,应该是this.props。
要将值传递到state里面,在【APP.js】里面,this.state = {posts: []}设置state的时候,直接把从props取出来的数据赋值给状态。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题