Я могу прочитать значение хранилища избыточности (Props), но я не могу обновить значение состояния избыточности (Props2), когда кажется, что действие отправляется функции редуктора.
Страница:
componentDidMount(){
console.info("Props:"+this.props.user)
}
dummyFunction() {
//Redux
this.props.toggleTheme('red');
//which prints the object above in the screenshot
console.info(this.props.toggleTheme('red'));
console.info("Props2:"+this.props.user);
}
const mapStateToProps = state => ({
user: state.user.userData,
});
const mapDispatchToProps = dispatch => ({
toggleTheme: (user) => dispatch(toggleTheme(user)),
});
export default connect(mapStateToProps, mapDispatchToProps)(Tab1Screen);
Редуктор:
const initialState = {
userData: "Apple",
};
const user = (state = initialState, action) => {
switch (action.type) {
case 'TOGGLE_THEME':
switch(action.payload) {
case 'red':
console.info("Payload1:"+ action.payload);
return { userData: "Orange" };
case 'blue':
console.info("Payload2:"+ action.payload);
return { userData: "Pear" };
}
default:
console.info("Payload:3"+ action.payload);
return state;
}
};
export default user;
Действия:
import { TOGGLE_THEME } from './actionTypes';
//which TOGGLE_THEME = 'TOGGLE_THEME'
export const toggleTheme = user => ({
type: TOGGLE_THEME,
payload: user,
});
Пакет.json
"dependencies": {
"@expo/samples": "2.1.1",
"expo": "^32.0.0",
"react": "^16.8.6",
"react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
"react-navigation": "^3.0.9",
"react-redux": "^6.0.1",
"redux": "^4.0.1",
}
Обновление: пытался получить состояние, когда я перехожу на другую страницу, и он работает правильно, получая оранжевое значение. Как я могу получить правильное значение на той же странице (в dummyFunction)?
Привет @AmrAly, я пробовал ... состояние безрезультатно. Странно то, что обновленное значение извлекается при переходе на другую страницу, а это означает, что оператор switch работает нормально.
В ответе это парень говорит, что вы не можете просто войти в консоль с той же функцией, вместо этого вы можете сделать это в componentWillReceiveProps
Даже когда я вызываю функцию во второй раз, она все равно показывает мне «красный». Я предполагаю, что это больше связано с тем, что «mapStateToProps» не обновляется.
попробуйте консоль войти в свое состояние mapStateToProps
сделал это, не может консоль внутри mapStateToProps. Redux не позволяет этого, к сожалению
вы можете вести консольный журнал следующим образом: const mapStateToProps = state => ( console.info('state:',state); return { user: state.user.userData, });
Можно и так const mapStateToProps = state => { console.info('state:',state); return { user: state.user.userData, }};
@AmrAly пытался это сделать, и я могу получить свое значение в mapStateToProps.
Значит, он изменяет значение userData?
Нет, та же функция страницы по-прежнему не может получить Orange. Но значение отражается в mapStateToProps.
Как и в ответе ниже, изменение значения должно быть обнаружено в методах жизненного цикла.
Я не уверен, можете ли вы получить измененное состояние редукции сразу после его установки (отправки действия).
Что вы можете сделать, это:
toggleTheme
акция в dummyFunction
componentDidUpdate
или getDerivedStateFromProps
.user
используйте его по своему усмотрению.Я думаю, проблема в том, что он пытается уловить изменение в той же функции dummyFunction
, но должен быть обнаружен в методе жизненного цикла в соответствии с вашим ответом.
Я бы сказал, что вместо того, чтобы возвращать новый объект состояния в вашем редукторе, вы можете изменить его так
return {...state, userData: "Orange"}
и в целях отладки попытаться упростить оператор switch, чтобы увидеть, что происходит не так.