Próbuję użyć haków reagowania do prostego problemu
const [personState,setPersonState] = useState({ DefinedObject });
z następującymi zależnościami.
"dependencies": {
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-scripts": "3.0.0"
}
ale nadal otrzymuję następujący błąd:
./src/App.js
Wiersz 7:
React Hook „useState” jest wywoływany w funkcji „app”, która nie jest ani składnikiem funkcji React, ani niestandardową funkcją React Hook React-hooks / rules-of-hooksWiersz 39:
„stan” nie jest zdefiniowany
no-undefWyszukaj słowa kluczowe, aby dowiedzieć się więcej o każdym błędzie.
Kod komponentu znajduje się poniżej:
import React, {useState} from 'react';
import './App.css';
import Person from './Person/Person';
const app = props => {
const [personState, setPersonSate] = useState({ person:[ {name:'bishnu',age:'32'}, {name:'rasmi',age:'27'}, {name:'fretbox',age:'4'} ], });
return (
<div className="App">
<h2>This is react</h2>
<Person name={personState.person[1].name} age="27"></Person>
<Person name={personState.person[2].name} age="4"></Person>
</div> );
};
export default app;
Składnik osoby
import React from 'react';
const person = props => {
return(
<div>
<h3>i am {props.name}</h3>
<p>i am {props.age} years old</p>
<p>{props.children}</p>
</div>
)
};
export default person;
reactjs
react-hooks
Bisznu
źródło
źródło
Odpowiedzi:
Spróbuj użyć słowa „aplikacja” wielkimi literami, np
W Reakcie komponenty muszą być pisane wielkimi literami, a niestandardowe hooki muszą zaczynać się od
use
.źródło
Checks if the node is a React component name. React component names must always start with a non-lowercase letter.
.Wydaje mi się, że robimy ten sam kurs w Udemy.
Jeśli tak, po prostu zamień
const app
Do
const App
Zrób tak dobrze, jak dla
Do
To działa dobrze dla mnie.
źródło
O ile wiem, w tym pakiecie znajduje się linter. I wymaga, aby komponent zaczynał się od postaci Capital. Proszę sprawdź to.
Jednak jak dla mnie to smutne.
źródło
Użyj dużej litery w nazwie funkcji.
źródło
Użyj const App zamiast const app
źródło
Po prostu spróbuj wpisać wielką literę nazwę aplikacji
źródło
Otrzymujesz ten błąd: „React Hook” useState ”jest wywoływany w funkcji„ App ”, która nie jest ani komponentem funkcji React, ani niestandardową funkcją React hook”
Rozwiązanie: po prostu musisz wykorzystać funkcję.
Na przykład:
źródło
Pierwsza litera funkcji powinna być wielką literą
źródło
Miałem ten sam problem. okazuje się, że problemem było wykorzystanie „A” w „aplikacji”. Ponadto, jeśli eksportujesz:
export default App;
pamiętaj, aby wyeksportować również tę samą nazwę „Aplikacja”.źródło
Komponenty powinny zaczynać się wielkimi literami. Pamiętaj również, aby zmienić pierwszą literę w linii do eksportu!
źródło
Czy masz odpowiedni import?
źródło
Nazwy komponentów React powinny być pisane wielkimi literami, a niestandardowe funkcje przechwytujące powinny zaczynać się od użycia słowa kluczowego aby zidentyfikować je jako reakcję.
Dlatego wykorzystaj komponenty aplikacji do App
źródło
Miałem ten sam problem, ale nie z aplikacją. Miałem klasę niestandardową, ale użyłem małej litery do rozpoczęcia nazwy funkcji, a także otrzymałem błąd.
Zmieniono pierwszą literę nazwy funkcji i linii eksportu na CamelCase i zniknął błąd.
w moim przypadku efekt końcowy wyglądał mniej więcej tak:
to rozwiązało mój problem.
źródło
Rozwiązanie jest proste, poprawna „aplikacja” i napisz „Aplikacja” z pierwszą wielką literą.
źródło
Skonfiguruj aplikację, aby aplikacja na pewno zadziała.
źródło
W JSX nazwa znacznika zapisana małymi literami jest traktowana jako natywny komponent HTML. Aby zareagować i rozpoznać funkcję jako komponent React, należy wpisać wielką literę w nazwie.
https://reactjs.org/docs/jsx-in-depth.html#html-tags-vs.-react-components
źródło
Wymień to
z tym
źródło
Zmień nazwę funkcji na wielką. To działa dla mnie.
źródło
W przypadku następującego błędu wpisz wielką literę komponentu, podobnie jak, a także eksportuj.
źródło
Rozwiązaniem, jak już wskazał Yuki, jest użycie wielkiej litery w nazwie komponentu. Należy pamiętać, że nie tylko „domyślny” składnik aplikacji musi być pisany wielkimi literami, ale wszystkie komponenty:
Wynika to z pakietu eslint-plugin-aware-hooks, a konkretnie funkcji isComponentName () wewnątrz skryptu RulesOfHooks.js.
Oficjalne wyjaśnienie z często zadawanych pytań dotyczących hooków :
źródło
Przede wszystkim musisz wpisać wielką literę pierwszej litery swoich komponentów, w twoim przypadku aplikacja powinna być aplikacją, a osoba powinna być osobą .
Próbowałem skopiować twój kod w nadziei znalezienia problemu. Ponieważ nie podałeś, jak nazywasz komponent aplikacji , widzę tylko jeden sposób, aby doprowadzić to do problemu.
To jest link w CodeSandbox: Invalid hook call .
Czemu? Z powodu poniższego kodu, który jest nieprawidłowy:
Powinno być:
Aby uzyskać więcej informacji, przeczytaj artykuł Reguła hooków - reaguj
Mam nadzieję że to pomoże!
źródło
Użyj dużej litery do zdefiniowania nazwy komponentu funkcjonalnego / React przechwytuje komponenty niestandardowe. „const 'app' powinno być const 'App'.
App.js
Person.js
[ReactHooks] [useState] [ReactJs]
źródło
Krok 1: Zmień nazwę pliku src / App.js na src / app.js
Krok 2: Kliknij „Tak” dla „Aktualizuj import dla app.js”.
Krok 3: Ponownie uruchom serwer ponownie.
źródło
Podczas pracy z komponentem funkcjonalnym Reacta, zawsze zachowuj pierwszą literę nazwy komponentu wielkimi literami, aby uniknąć błędów związanych z hookami reakcji.
W twoim przypadku nazwałeś komponent
app
, który powinien zostać zmieniony naApp
, jak powiedziałem powyżej, aby uniknąć błędu przechwytywania reakcji.źródło
źródło
W funkcji aplikacji błędnie wpisałeś słowo bez
setpersonSate
literyt
, tak powinno byćsetpersonState
.Błąd :
Rozwiązanie :
źródło
Dzieje się tak z powodu reguły ESLint dla React hooków. Tutaj znajdziesz link do reguły:
Reguła ESLint dla React hooków
Od teraz reguła jest opisana w wierszu nr. 44.
źródło
Nie używaj funkcji strzałek do tworzenia funkcjonalnych komponentów.
Wykonaj jeden z poniższych przykładów:
Lub
Jeśli masz problemy z
"ref"
(prawdopodobnie w pętlach), rozwiązaniem jest użycieforwardRef()
:źródło