У меня есть два несвязанных компонента, подключенных к редуксу.Одна кнопка, а другая - домашний экран приложения.План состоит в том, чтобы сообщить HomeScreen, когда кнопка нажата.Итак, у меня есть действие и редуктор для прохождения статуса кнопки.Это работает нормально, за исключением того, что HomeScreen не получает обновления, когда я нажимаю кнопку в первый раз.Я должен дважды щелкнуть по кнопке, чтобы состояние вырвалось.
Добавить действие инцидента:
import { PLUS_INCIDENT } from './types';
export const plusIncident = pressed => (dispatch) => {
console.log('2: action: ', pressed);
dispatch({
type: PLUS_INCIDENT,
payload: pressed
});
};
Компонент кнопки:
// The action
import { plusIncident } from '../redux/actions/plusIncident';
import { connect } from 'react-redux';
class AddIncidentButton extends Component {
handleAddButtonPress = () => {
const { pressed } = this.state;
const { plusIncident } = this.props;
const btnState = !pressed;
this.setState({ pressed: btnState });
plusIncident(btnState);
};
...
}
...
export default connect(
null,
{ plusIncident }
)(AddIncidentButton);
Редуктор:
import { PLUS_INCIDENT } from '../actions/types';
const initialiState = {
pressed: false
};
function inc(state = initialiState, action) {
switch (action.type) {
case PLUS_INCIDENT:
return {
...state,
pressed: !action.payload
};
default:
return state;
}
}
HomeScreen: вызывается только метод componentWillReceivePropsпосле двойного нажатия на кнопку.
class HomeScreen extends React.Component {
state = {
pressed: false
};
componentWillReceiveProps(nextProps) {
const { pressed } = this.props;
if (pressed !== nextProps.pressed) {
this.setState({ pressed: !nextProps.pressed });
}
}
...
}
const mapStateToProps = state => ({
pressed: state.inc.pressed
});
export default connect(mapStateToProps)(HomeScreen);