javascript - 使用 mapDispatchToProps 映射的操作不带参数

标签 javascript reactjs ecmascript-6 react-redux

父组件

const myParentComponent = ({ sourceValue, classes, doStuff }) => {
    return (
        <div>
            <MyComponent className={classes.iconWithText} value={sourceValue} onDoStuff={doStuff} />
        </div>
    );
}

const mapStateToProps = () => {
    ... 
}

function mapDispatchToProps(dispatch) {
    return {
        doStuff: () => dispatch(doStuffAction())
    };
}

export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(myParentComponent));

用途

子组件

export default class MyComponent extends Component {
    handleClick = () => {
        console.info(this.props.value);

        this.props.onDoStuff(this.props.value);
    }

    render() {
        return (
            <SomeIcon className={this.props.className} onClick={this.handleClick} />
        );
    }
}

最终,被调用的操作本身除了记录之外什么也不做:

export function doStuff(value) {
    console.info('At doStuff action', value);
    return { type: DO_STUFF, value };
}

从技术上讲,一切似乎都正常,没有错误。但是,操作日志中的最后一个 console.info 值为 undefined。我很确定这是因为我像这样映射了 onClick 操作:

function mapDispatchToProps(dispatch) {
    return {
        doStuff: () => dispatch(doStuffAction())
    };
}

如果我提供这样的参数:

function mapDispatchToProps(dispatch) {
    return {
        doStuff: () => dispatch(doStuffAction('123456'))
    };
}

然后 doStuff 操作会记录该 123456 值。

看起来从主组件传递到 onDoStuff 的 sourceValue 确实没有任何效果。

What do I need to do to make sure the original sourceValue is passed?

最佳答案

您需要做的就是接受箭头函数中的参数并将其传递给操作,例如

function mapDispatchToProps(dispatch) {
    return {
        doStuff: (value) => dispatch(doStuffAction(value))
    };
}

如果你必须传递多个参数,你可以这样写

function mapDispatchToProps(dispatch) {
    return {
        doStuff: (value, key) => dispatch(doStuffAction(value, key))
    };
}

如果您有多个根据使用情况而变化的参数,例如您希望从一个组件向 doStuffAction 传递值,而在某个组件中您希望传递 valuekey 那么最好将值作为对象,例如

function mapDispatchToProps(dispatch) {
    return {
        doStuff: (obj) => dispatch(doStuffAction(obj))
    };
}

和行动:

export function doStuff({value, key}) {
    console.info('At doStuff action', value, key);
    return { type: DO_STUFF, value };
}

关于javascript - 使用 mapDispatchToProps 映射的操作不带参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50042622/

相关文章:

javascript - 使用 JS 和 PHP 将 <div> 保存到 MySQL - 可能吗?

javascript - 为什么我在 React Redux reducer 中收到有关合成事件的警告?

reactjs - Redux 工具包 combineReducers 问题。 :Store does not have a valid reducer. 确保传递给 combineReducers 的参数是一个对象,其

javascript - ES6 模块和循环依赖

javascript - 正确、安全地使用 Markdown

javascript - React.js - 如何在动态生成的按钮中成功添加元素?

javascript - React Bit Dev 模块显示 404

javascript - 'caller' 和 'arguments' 是受限函数属性,无法在此上下文中访问

javascript - 为什么yield不能解析promise?

javascript - 根据项目要求将json对象数组解析为特定格式的json数组