useState
후크를 사용할 때이 오류가 발생합니다 . 참조를 위해 반응 문서 를 살펴보면서 기본 형식으로되어 있지만 여전히이 오류가 발생합니다. 얼굴 손바닥 순간을 맞이할 준비가되었습니다 …
export function Header() {
const [count, setCount] = useState(0)
return <span>header</span>
}
답변
업데이트 : 2018 년 12 월
의 새 버전이 출시 react-hot-loader
되었습니다 . 링크 . Hooks는 이제 즉시 작동합니다. 저자 theKashey에게 감사드립니다.
이 상용구 https://github.com/ReeganExE/react-hooks-boilerplate를 확인 하십시오.
- React Hooks
- 반응 핫 로더
- Webpack, Babel, ESLint Airbnb
이전 답변 :
먼저 react@next
및 react-dom@next
.
그런 다음 사용 중인지 확인하십시오 react-hot-loader
.
제 경우에는 핫 로더를 비활성화하면 HMR이 작동 할 수 있습니다.
https://github.com/gaearon/react-hot-loader/issues/1088을 참조 하세요 .
인용 :
예. RHL은 후크와 100 % 호환되지 않습니다. 그 뒤에는 몇 가지 이유가 있습니다.
SFC는 클래스 구성 요소로 변환됩니다. SFC에 “update”메서드가없는 한 HMR에서 강제 업데이트 할 수있는 이유가 있습니다. 업데이트를 강제하는 다른 방법을 찾고 있습니다 (예 : RHL이 SFC를 죽이고 있습니다.
“hotReplacementRender”. RHL은 React의 작업을 수행하고 이전 앱과 새 앱을 렌더링하여 병합하려고합니다. 그래서 분명히 지금은 깨졌습니다.
두 문제를 모두 완화하기 위해 PR 초안을 작성하겠습니다. 작동하지만 오늘은 아닙니다.
작동하는 더 적절한 수정이 있습니다- 콜드 API
모든 사용자 지정 유형에 대해 RHL을 비활성화 할 수 있습니다.
import { cold } from 'react-hot-loader';
cold(MyComponent);
"useState/useEffect"
내부 구성 요소 소스 코드를 검색 하고 “콜드”합니다.
업데이트 :
react-hot-loader 관리자의 업데이트에 따라 다음 react-hot-loader@next
과 같이 구성을 시도 하고 설정할 수 있습니다 .
import { setConfig } from 'react-hot-loader';
setConfig({
// set this flag to support SFC if patch is not landed
pureSFC: true
});
업데이트에 대해 @loganfromlogan에게 감사드립니다.
답변
내 문제는 react-dom
모듈 업데이트를 잊었습니다 . 문제를 참조하십시오 .
답변
같은 문제가있었습니다. 내 문제는 React Router와 관련이 있습니다. 나는 실수로 사용했다
<Route render={ComponentUsingHooks} />
대신에
<Route component={ComponentUsingHooks} />
답변
컴포넌트 파일에서 React의 기본 후크를 가져온 다음 사용자 지정 후크에 전달하여이 문제를 해결할 수있었습니다. 어떤 이유로 사용자 지정 후크 파일에서 React 후크 (예 : useState)를 가져올 때만 오류가 발생합니다.
내 구성 요소 파일에서 useState를 가져옵니다.
import React, {useState} from 'react'; // import useState
import {useCustomHook} from '../hooks/custom-hook'; // import custom hook
const initialState = {items: []};
export default function MyComponent(props) {
const [state, actions] = useCustomHook(initialState, {useState});
...
}
그런 다음 내 후크 파일에서 :
// do not import useState here
export function useCustomHook(initialValue, {useState}) {
const [state, setState] = useState(initialValue || {items: []});
const actions = {
add: (item) => setState(currentState => {
const newItems = currentState.items.concat([item]);
return {
...currentState,
items: newItems,
};
}),
};
return [state, actions];
}
이 방법은 기본 후크를 제공하기 위해 React의 라이브러리를 모의 할 필요가 없기 때문에 후크의 테스트 가능성을 향상 시켰습니다. 대신 모의 useState
후크를 사용자 지정 후크의 함수에 바로 전달할 수 있습니다 . 사용자 지정 후크가 이제 React 라이브러리와 결합되지 않아보다 자연스러운 기능 프로그래밍 및 테스트를 허용하므로 코드 품질이 향상된다고 생각합니다.
답변
Parcel의 Hot Module Replacement 를 사용하는 동안이 오류가 발생했으며 react-dom
알파 버전 으로 업데이트 하여 해결했습니다.
yarn add react-dom@16.7.0-alpha.0
답변
패키지 docz가 사용 react@16.6.3
되었고 최종 출력 번들에 두 개의 반응 버전이 있는 monorepo에서 문제가 발생했습니다 .
패키지를 제거하여 수정했습니다 ?
답변
나에게 문제는 실제로 react-hot-loader 입니다.
다음 과 같은 방법을 사용하여 전체 앱 대신 단일 구성 요소에 대해 react-hot-loader를 비활성화 할 수 있습니다 cold
.
import { cold } from 'react-hot-loader'
export const YourComponent = cold(() => {
// ... hook code
return (
// ...
)
})
또는
export default cold(YourComponent)