Я занимаюсь разработкой приложения с реактивным и избыточным доступом.Я хочу сохранить мои любимые фильмы в магазине.Таким образом, я настраиваю свои действия, редукторы, хранилище, провайдер, подключаюсь ...
Когда я отправляю действие, вызывается редуктор и состояние изменяется (проверяю с помощью (состояние nextState ===), однако mapStateToPropsникогда не вызывается.
Для информации, диспетчерское действие и mapStateToProps происходят из одного компонента. Этот компонент находится в StackNavigator. Даже если я использую только компонент, проблема остается той же.
Я догадался, что меняю состояние, но это не тот случай, я думаю. Я застрял на этой проблеме какое-то время, я проверил все существующие проблемы, ни одно из решений не решило мое.
диспетчер:
_toggleFavorite() {
const action = { type: "TOGGLE_FAVORITE", value: this.state.film }
this.props.dispatch(action)
}
Редуктор:
const initialState = { favoritesFilm: [] }
function toggleFavorite(state = initialState, action) {
let nextState
switch (action.type) {
case 'TOGGLE_FAVORITE':
const favoriteFilmIndex = state.favoritesFilm.findIndex(item => item.id === action.value.id)
if (favoriteFilmIndex !== -1) {
nextState = {
...state,
favoritesFilm: state.favoritesFilm.filter( (item, index) => index !== favoriteFilmIndex)
}
}
else {
nextState = {
...state,
favoritesFilm: [...state.favoritesFilm, action.value]
}
}
console.log('state: ', state)
console.log('nextState: ', nextState)
console.log(nextState === state)
return nextState
default:
return state
}
}
export default toggleFavorite
Подключение к магазину:
const mapStateToProps = (state) => {
console.log('changed')
return {
favoritesFilm: state.favoritesFilm
}
}
export default connect(mapStateToProps)(FilmDetail)
Навигатор:
const SearchStackNavigator = createStackNavigator({
SearchBar: {
screen: SearchBar,
navigationOptions: {
title: 'Rechercher'
}
},
FilmDetail: {
screen: FilmDetail
}
})
export default createAppContainer(SearchStackNavigator)
App.js:
import Navigation from './src/Navigation/Navigation';
import store from './src/Store/configureStore'
import { Provider } from 'react-redux'
export default class App extends Component<Props> {
render() {
return (
<Provider store={store}>
<Navigation/>
</Provider>
);
}
}
Журнал от редукторов работает. Вот пример:
state: – {favoritesFilm: []}
nextstate: – {favoritesFilm: Array}
false
Журнал («измененный») никогда не появляется, ни componentDidUpdate (). Кроме того, ничегоперерисован.
СпасибоВы заранее.