首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux-orm在添加数据后不调用mapStateToProps

Redux-orm在添加数据后不调用mapStateToProps
EN

Stack Overflow用户
提问于 2017-03-29 21:51:15
回答 1查看 348关注 0票数 0

我在使用redux-orm,在添加实体后,我的选择器没有使用mapStateToProps中的新对象进行更新,因此导致不会再次调用render()。我已经看过了教程,但看不出我做错了什么:

另一个组件正在调用BookReducer,所以我知道100%的reducer正在被调用。

这是我的reducer:

代码语言:javascript
复制
export default function BookReducer(state = initialState, action) {

    const session = orm.session(state);

    switch (action.type) {

        case 'newBook':

            session.Book.create({ id: 0, type: 'novel' });

            //I can see verify that the object has been added  to the ORM
            console.log(session.Book.all().toRefArray())
     }

     return session.state; 
}

下面是我的选择器:

代码语言:javascript
复制
import orm from './orm';

const BookSelector = createSelector(orm, state => state.orm, session => {
    return session.Book.all().toRefArray()
});

下面是我的组件:

代码语言:javascript
复制
class Main extends React.Component {

  constructor(props) {
      super(props);
  }

  render() {

    console.log("debug")
    console.log(this.props.books)

    return (
       <div>
           {this.props.books}
       </div>
    )


    function mapStateToProps(state) {

       return {
          isOpen: true,
          books: BookSelector(state)
       };
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-03-29 22:03:11

您似乎没有将主组件与mapStateToProps连接起来。USe connect喜欢export default connect(mapStateToProps)(Main);,并在Main组件外部定义它

代码语言:javascript
复制
import connect from 'react-redux';

class Main extends React.Component {

  constructor(props) {
      super(props);
  }

  render() {

    console.log("debug")
    console.log(this.props.books)

    return (
       <div>
           {this.props.books}
       </div>
    )



}

  function mapStateToProps(state) {

       return {
          isOpen: true,
          books: BookSelector(state)
       };
    }
export default connect(mapStateToProps)(Main);

此外,您还需要导出和导入BookSelector

代码语言:javascript
复制
import orm from './orm';

const BookSelector = createSelector(orm, state => state.orm, session => {
    return session.Book.all().toRefArray()
});
export default BookSelector;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43095477

复制
相关文章

相似问题

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