简体   繁体   English

如何使用布尔值正确更新 redux 状态?

[英]How to properly update redux state with a boolean value?

I have a React app with a currency unit switch.我有一个带有货币单位开关的 React 应用程序。 I have a function to switch the unit and update redux so that every component that has called the unit will be re-rendered.我有一个功能来切换单元并更新 redux,以便每个调用该单元的组件都将被重新渲染。 The problem is the redux prop (storedCurrencyUnit) is UNDEFINED whenever I updated the value and call the update function to redux.问题是每当我更新值并将更新函数调用到 redux 时,redux 道具(storedCurrencyUnit)就是 UNDEFINED。

Switch component开关组件

import { compose } from 'recompose';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { updateCurrencyUnit } from '../../store/actions';

class FrontHeader extends Component {

    handleCurrencyChange = (e) => {

        const { updateCurrencyUnit, storedCurrencyUnit } = this.props;
        updateCurrencyUnit(e.target.checked)
        console.log("unit", storedCurrencyUnit) // this is UNDEFINED
        this.setState({ aud: e.target.checked }, () => {
            localStorage.setItem("currencyUnit", this.state.aud ? "AUD" : "USD")
        })
    }

    render() {
       return (
          <Switch
            checked={this.state.aud}
            onChange={this.handleCurrencyChange}
            color="secondary"
            name="aud"
            inputProps={{ 'aria-label': 'currencyUnit' }}
          />
       )
    }
}

const mapStateToProps = (state) => ({
    storedCurrencyUnit: state.storedCurrencyUnit
})

const mapDispatchToProps = (dispatch) => {
    return bindActionCreators({
        updateCurrencyUnit: updateCurrencyUnit,
    }, dispatch);
}

export default compose(connect(mapStateToProps, mapDispatchToProps))(FrontHeader);

currencyReducer.js货币减速器.js

const storedCurrencyUnit = (state = null, action) => {
    switch (action.type) {
        case 'UPDATE_CURRENCYUNIT':
            return action.payload;
        default:
            return state;
    }
}
export default storedCurrencyUnit;

actions.js动作.js

export const updateCurrencyUnit = (updatedCurrencyUnit) => {
    return {
        type: 'UPDATE_CURRENCYUNIT',
        payload: updatedCurrencyUnit,
    }
}

How can I solve this?我该如何解决这个问题?

You need to dispatch the action using dispatcher.您需要使用调度程序调度操作。 only that will maintain the promise and let know the redux store.只有这样才能保持承诺并让 Redux 商店知道。

this.props.dispatch(updateCurrencyUnit("some value"));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM