Я думаю, проблема в том, что вы напрямую мутируете объект state.library
и без предшествующего store.setState({})
отправляете ту же ссылку из state.library
, что может привести к некоторым неожиданные результаты.
Например, если у вас есть селекторы, созданные с помощью createSelector
, а library
является частью аргументов функции проекции , вы получите ранее вычисленный результат , поскольку объект prevArguments.library
имеет ту же ссылку, что и currentArguments.library
.
setState({})
похож на более глубокую ссылку sh, поскольку вы отправляете совершенно новую ссылку.
setState(state)
- это другая ссылка по сравнению с {}
, поэтому каждую функцию проекции селектора следует запускать повторно.
Я думаю, что она должна работать нормально без setState({})
, если вы это сделаете:
state = {
...state,
library: {
...state.library,
bookIdSelected: bookId,
}
};
store.setState(state);