React-Intl injectIntl​​无法与mergeProps一起使用

时间:2018-08-10 14:48:26

标签: reactjs redux react-redux react-intl

我有下面的代码很好用

module.exports = injectIntl(redux.connect(mapStateToProps, mapDispatchToProps)(props => {
    document.title = props.intl.formatMessage({ id: "app-name" });

    return (<App {...props} />);
}));

当我将mergeProps添加到redux.connect时,道具中不再存在'intl'并且尝试设置document.title时出现错误

破损的代码:

module.exports = injectIntl(redux.connect(mapStateToProps, mapDispatchToProps, mergeProps)(props => {
    document.title = props.intl.formatMessage({ id: "app-name" });

    return (<App {...props} />);
}));

我的mergeProps函数:

function mergeProps(stateProps, dispatchProps) {
    const mergeProps = {
        error() {
            alert("throw error");
        },
    };
    return Object.assign({}, stateProps, dispatchProps, mergeProps);
}

在redux.connect函数中用null替换mergeProps时,没有错误,并且代码运行正常。

有人知道为什么合并道具似乎破坏了react-intl注入吗?

1 个答案:

答案 0 :(得分:0)

通过将ownProps传递到合并道具中解决了这个问题。这正是ownProps旨在解决的问题,我并不陌生。

解决方案如下:

function mergeProps(stateProps, dispatchProps, ownProps) {
    const mergeProps = {
        error() {
            alert("throw error");
        },
    };
    return Object.assign({}, stateProps, dispatchProps, ownProps, mergeProps);
}