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

1 ответ

Вы, кажется, не связали Главный компонент с mapStateToProps, использование connect лайк export default connect(mapStateToProps)(Main); и определить его вне 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;
Другие вопросы по тегам