Ответ 1
Попробуйте использовать "приложение" с заглавной буквы, например
const App = props => {...}
export default App;
Я пытаюсь использовать ответные крючки для простой задачи
const[personState,setPersonState]= useState({DefinedObject});
со следующими зависимостями.
"dependencies": {
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-scripts": "3.0.0"
}
но я все еще получаю следующую ошибку:
./src/App.js
Строка 7:
React Hook "useState" вызывается в функции "приложение", которое не является ни компонентом функции React, ни пользовательским React Реакция-зацепки/правила-зацепки с функцией крючкаСтрока 39:
"состояние" не определено
нет-UNDEFПоиск по ключевым словам, чтобы узнать больше о каждой ошибке.
Попробуйте использовать "приложение" с заглавной буквы, например
const App = props => {...}
export default App;
Я чувствую, что мы делаем тот же курс в Удеми.
Если это так, просто используйте
const app
к
const App
Делай так же как и для
export default app
к
export default App
Это хорошо работает для меня.
Насколько я знаю, в эту комплектацию входит линтер. И это требует, чтобы ваша составляющая начиналась с заглавной буквы. Пожалуйста, проверь это.
Однако, как по мне, это грустно.
Вы получаете эту ошибку: "React Hook" useState "вызывается в функции" App ", которая не является ни компонентом функции React, ни пользовательской функцией React Hook"
Решение. В основном вам нужно использовать заглавные буквы.
Например:
const Helper =()=>{}
function Helper2(){}
Я была такая же проблема. Оказывается, что заглавная буква "А" в "приложении" была проблемой. Кроме того, если вы делаете экспорт: export default App;
убедитесь, что вы экспортируете то же имя "приложение", а также.
Компоненты должны начинаться с заглавных букв. Также не забудьте изменить первую букву в строке для экспорта!
У меня была такая же проблема, но не с приложением. У меня был собственный класс, но я использовал строчную букву для запуска имени функции, а также получил ошибку.
Изменили первую букву имени функции и строки экспорта на CamelCase и ошибка исчезла.
в моем случае конечный результат был что-то вроде:
function Document() {
....
}
export default Document;
это решило мою проблему.
У вас есть правильный импорт?
import React, { useState } from 'react';
Эта ошибка происходит из-за пакета eslint-plugin-Reaction-hooks, который был добавлен create-реагировать-приложение во время создания приложения реакции.
добавьте строку комментария ниже, как показано ниже,
//eslint-disable-next-line react-hooks/rules-of-hooks
useEffect(() => {
....
}, []);
Или
//eslint-disable-next-line react-hooks/rules-of-hooks
const [value, setState] = useState(false);
То же самое исправление (изменение на заглавную "A" приложение) работает для меня
const App = props => { }
, ,
export default App;
Решение простое, правильное "app" и напишите "App" с первым символом в верхнем регистре.
Решение, как уже указывал Юки, состоит в том, чтобы использовать имя компонента с большой буквы. Важно отметить, что капитализировать нужно не только компонент приложения "по умолчанию", но и все компоненты:
const Person = () => {return ...};
export default Person;
Это связано с пакетом eslint-plugin-Reaction-hooks, в частности с функцией isComponentName() внутри скрипта RulesOfHooks.js.
Официальное объяснение из часто задаваемых вопросов Hooks:
Мы предоставляем плагин ESLint, который применяет правила хуков, чтобы избежать ошибок. Предполагается, что любая функция, начинающаяся с "use" и заглавная буква сразу после нее, является Hook. Мы признаем, что эта эвристика не идеальна, и могут быть некоторые ложные срабатывания, но без общесистемной конвенции просто невозможно заставить Hooks работать хорошо - и более длинные имена будут препятствовать людям принимать Hooks или следовать соглашению.
Прежде всего, вам нужно прописать FirstLetter ваших компонентов в верхнем регистре, в вашем случае приложение должно быть приложением, а лицо должно быть человеком.
Я пытался скопировать ваш код в надежде найти проблему. Поскольку вы не поделились тем, как вызываете компонент приложения, я вижу только один способ привести это к проблеме.
Это ссылка в CodeSandbox: Неверный вызов ловушки.
Почему? Из-за кода ниже, который является неправильным:
ReactDOM.render(App(), rootElement);
Это должно было быть:
ReactDOM.render(<App />, rootElement);
Для получения дополнительной информации вы должны прочитать Rule of Hooks - React
Надеюсь это поможет!
используйте заглавную букву в имени функции. Например: - приложение функции {}