Определение mapDispatchToProps как объекта - PullRequest
0 голосов
/ 23 ноября 2018

Мне просто интересно, Defining mapDispatchToProps As An Object как я могу передать в него ownProps?как и в функции, я могу передать реквизиты в качестве аргумента.

const mapDispatchToProps = (dispatch, ownProps) => {
  toggleTodo: () => dispatch(toggleTodo(ownProps.todoId));
};

для объекта, как передать ownProps?

const mapDispatchToProps = {
  toggleTodo
};

Мой аккаунт был заблокирован из-за некоторых вопросов с отрицательным голосом, забавно то, что я должен отредактировать их, хотяУ меня уже есть принятый ответ. Я не понимаю, в чем смысл этого делать. Я так расстроен этой системой стекового потока.

Теперь я в принципе ничего не могу сделать, кроме как продолжать редактировать свои вопросы, и у них есть всеответилиЭто смешно !!!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

ownProps не может быть передано ему без выполнения подключения в функции mergeProps, переданной в функции connect.

Видите ли, когда mapDispatchToProps является объектом, whenMapDispatchToPropsIsObject вызывается.Он, в свою очередь, вызывает wrapMapToPropsConstant, который делает это

constantSelector.dependsOnOwnProps = false

Теперь это свойство используется, чтобы решить, должен ли диспетчер действий вызываться с подпорками или нет.См. Все handle* функции, такие как handleNewPropsAndNewState в src / connect / selectorFactory.js

Это контрастирует с тем, что происходит, когда mapDispatchToProps является функцией,В этом случае wrapMapToPropsFunc при вызове оборачивает диспетчер действий, а затем вызывает его с подпорками.

Не передавая mergeProps, вам нужно будет перенаправить id реквизит создателю действияв компоненте, который связан с mapDispatchToProp

например

onClickToggleButton = () => {
  const {id, toggleTodo} = this.props
  toggleTodo(id)
}
0 голосов
/ 23 ноября 2018

Краткий ответ: Вам не нужно.Вы передаете реквизиты в каждое действие, когда они вызваны и необходимы.

Длинный ответ: mapDispatchToProps связывает ваши действия с диспетчеризацией в компоненте, так что вы можете вызвать действие и передать необходимые реквизиты для него, используя this.props.action вместо неловкого поиска отправки и использования this.props.dispatch(action()) или аналогичного.

Я считаю, что проще подключить ваши действия к экспорту и вызывать действие this.props.addUser(prop1,prop2), когда это необходимо - onClick(), componentDidMount() и т. Д. По умолчанию он назначает отправку без необходимости выполнять mapDispatchToProps,Так что

export default connect(
    mapStateToProps, 
    {action1, action2, addUser})(User)

тогда вы можете использовать:

addNewUser = () => {
  this.props.addUser(this.state.person);
}

, где вы проходите в реквизитах, которые вам нужны, а затем выполняете любые другие действия или действие самого редуктора (в зависимости от ваших предпочтений).потока), таких как:

export const addUser = user => ({
    type: ADD_USER_SUCCESS,
    payload: {user}
})
...