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



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

另一个组件是调用 BookReducer,所以我知道 100% 正在调用缩减器。

这是我的减速器:

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; 
}

这是我的选择器:

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

这是我的组件:

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)
       };
    }
}

您似乎没有将主组件与mapStateToProps 联系起来。像export default connect(mapStateToProps)(Main);一样使用connect,并在Main组件之外定义它

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

import orm from './orm';
const BookSelector = createSelector(orm, state => state.orm, session => {
    return session.Book.all().toRefArray()
});
export default BookSelector;

最新更新