Диспетчеризация не является функцией TypeError
Я новичок в Reaction-Redux, и я использую промежуточное программное обеспечение React-Thunk. Я получаю сообщение об ошибке "Uncaught TypeError: dispatch не является функцией" всякий раз, когда я пытаюсь запустить создателя действий (нажатием моей кнопки). Кто-нибудь знает, что происходит?
SRC / действия /index.js
function editUserName (newUserName) {
return {
type: 'CHANGE_USER_NAME',
newUserName: newUserName
}
}
export function editUserNameDelegate () {
return function (dispatch, getState) {
return dispatch(editUserName("thunkUser"))
}
}
SRC / контейнеры /admin.js
import { editUserNameDelegate } from '../actions/index'
...
<input type="button" onClick={ editUserNameDelegate() } value="edit UserName" />
4 ответа
Вы исполняете editUserNameDelegate
функция внутри render
вместо того, чтобы передать его как onClick
обработчик. Ты хочешь onClick={editUserNameDelegate}
вместо.
Кроме того, если вы пишете так, вам нужно убедиться, что функция связана с диспетчеризацией при вызове. Вы можете сделать это как:
export default connect(null, {editUserNameDelegate})(MyComponent)
А потом пройти onClick={this.props.editUserNameDelegate}
в вашей функции рендеринга.
Если эта ошибка возникла в результате использования контекста, вы можете импортировать его как: const {state, dispatch} = useContext(местоположение контекста)
Магазин - это то, что обеспечивает dispatch
функция. Так что вам нужно либо подключить ваш компонент к магазину, используя что-то вроде connect
с реагировать на редукцию ( https://github.com/reactjs/react-redux), или вам нужно позвонить store.dispatch(editUserNameDelegate())
,
Вы также должны убедиться, что вы добавили Redux-Thunk в качестве промежуточного программного обеспечения в вашем магазине. Узнайте больше о Red-Thunk здесь: https://github.com/gaearon/redux-thunk
Вы должны указать, что такое функция или класс src/container/admin.js?
Если это функциональный компонент, вы должны использовать onClick={() => editUserNameDelegate()}