использовать ownProps в mapDispatchToProp - PullRequest
0 голосов
/ 09 мая 2019

Я новичок в React, просто вопрос о передаче ownProps в mapDispatchToProp, ниже приведен фрагмент кода, который я видел:

class EditExpensePage extends React.Component {
...
}
//EditExpensePage is a component

const mapDispatchToProp = (dispatch, props) => {
    return {
        editExpense: (id, expense) => dispatch(editExpense(id, expense)),
        removeExpense: (data) => dispatch(removeExpense(data))
    };
}

connectedComponent = connect(mapStateToProp, mapDispatchToProp(EditExpensePage);
export default connectedComponent ;

Я не понимаю, почему нам все еще нужно передавать реквизиты дажеон не используется в функции mapDispatchToProp?

Обновлено :

Я обнаружил, что проходные реквизиты в mapDispatchToProp переопределяют предоставленные пользователем реквизиты, например,

<connectedComponent date={2019} />

так что компоненты EditExpensePage не будут иметь props.date?мое понимание верно?

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Это не вы, кто передает props в mapDispatchToProps, он передается react-redux's connect HOC, что может быть полезно в некоторых случаях

В вашем случае вы не используете props в mapDispatchToPropsи может избежать этого при определении функции

class EditExpensePage extends React.Component {
...
}
//EditExpensePage is a component

const mapDispatchToProp = (dispatch) => {
    return {
        editExpense: (id, expense) => dispatch(editExpense(id, expense)),
        removeExpense: (data) => dispatch(removeExpense(data))
    };
}

export default connect(mapStateToProp, mapDispatchToProp)(EditExpensePage);

РЕДАКТИРОВАТЬ:

connectedComponent = connect(mapStateToProp, mapDispatchToProp(EditExpensePage);
export default connectedComponent ;

, что касается приведенного ниже синтаксиса, это неверно, поскольку connect является HOC, который принимаеткомпонент в качестве аргумента, тогда как mapDispatchToProps должны быть ссылками на функции.Правильный синтаксис:

connectedComponent = connect(mapStateToProp, mapDispatchToProp)(EditExpensePage);
    export default connectedComponent ;
0 голосов
/ 09 мая 2019

Вы НЕ ДОЛЖНЫ передавать ownProps, это необязательный аргумент для случая, когда вы должны использовать собственные реквизиты подключенного компонента (контейнера) внутри mapDispatchToProps. Обычно вы просто получаете реквизитов из этой функции карты (какие реквизиты являются функциями) и не переходите в нее.

Кстати, все mapDispatchToProps - необязательный аргумент. Если вы не передадите его в функцию connect, вы сможете напрямую связаться с диспетчером из реквизита следующим образом:

class EditExpensePage extends React.Component {
  handleEditExpense = (id, expense) => {
    const { dispatch } = this.props;
    dispatch({ type: EXPENSE_EDIT, payload: { id, expense } });
  }
  ...
}

connect(mapStateToProps)(EditExpensePage)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...