Проблема в том, что вы используете его в render
в компоненте класса. Вы не можете использовать хуки в компонентах класса. Вот почему в сообщении об ошибке указано:
Недопустимый вызов ловушки Крючки можно вызывать только внутри тела функционального компонента.
(мой акцент) . Компоненты класса не являются функциональными компонентами. (Это немного легко пропустить, было бы хорошо, если бы в списке возможных причин были упомянуты компоненты класса, в частности.)
Так что вы бы хотели сделать его компонентом функции:
import React, {
Component
} from 'react';
import {
useDispatch
} from 'react-redux';
import {
update
} from '../store/actions';
function Something() { // ***
return <input onChange={() => useDispatch()(update("test"))}/>; // ***
} // ***
export default Something;
Также обратите внимание на предупреждение в документации , что приведенное выше вызовет ненужный рендеринг и что вам следует использовать useCallback
:
import React, {
Component,
useCallback
} from 'react';
import {
useDispatch
} from 'react-redux';
import {
update
} from '../store/actions';
function Something() {
const dispatch = useDispatch(); // ***
const handleChange = useCallback( // ***
() => dispatch(update("test")), // ***
[dispatch] // ***
); // ***
return <input onChange={handleChange}/>; // ***
}
export default Something;