React 후크에 대한 다섯 가지 팁
15998 단어 javascripttypescriptreact
후크 작업은 클래스 구성 요소의 수명 주기 메서드보다 쉽지만 몇 가지 문제가 발생하여 오늘 내 솔루션을 공유하고 싶습니다.
1. 코드를 잘라
더 나은 이해를 위해 코드를 작은 조각으로 자르는 것을 좋아합니다. 리딩 순서대로 4개의 블록을 만듭니다. 일반적으로 기능 구성 요소와 클래스 구성 요소 간에 동일한 레이아웃을 사용합니다. 이 기사에서는 기능적 구성 요소에 대해서만 설명합니다.
첫 번째 블록은 모든 후크와 변수를 위한 것입니다. 상태, 변수 또는 컨텍스트와 같은 모든 데이터와 다음 모든 효과로 시작합니다.
두 번째 블록은 이벤트용입니다.
세 번째 블록은 경우에 대한 것입니다. 때때로 jsx를 작은 조각으로 나누거나 삼항 조건이 있습니다. 가독성을 유지하려면 일부 부분을 분리하는 것이 좋습니다.
마지막 것은 주요 jsx 부분이 있는 return 문을 포함합니다.
const ReloadButton: React.FC<ReloadPageButtonProps> = () => {
const { t } = useTranslation();
const { dispatch } = useContext(MyContext);
const handleClick = () => {
dispatch({ type: Types.Reload });
};
return (
<Button onClick={handleClick}>
<Refresh />
</Button>
);
};
export default ReloadButton;
2. 사용자 지정 후크 사용
하나의 상태와 하나의 효과만 있는 경우 구성 요소의 모든 항목을 유지할 수 있습니다. 그러나 더 많은 것이 있다면 사용자 지정 후크를 만드는 것이 좋습니다.
사용자 지정 후크는 사용 및 존중으로 시작해야 합니다React hook's rules.
명심하세요: 커스텀 훅에서 커스텀 훅을 사용할 수 있습니다.
좋은 예는 선택 입력 필드의 옵션을 채우는 후크입니다. 첫 번째 후크는 API에서 데이터를 가져오고 두 번째 후크는 옵션을 빌드합니다.
양식 구성 요소에는 옵션 후크만 있습니다. 다른 변수와 함수는 숨겨져 있습니다. 옵션 훅은 마운트 시 페치 훅을 시작하고 페치 훅의 로딩 상태와 준비가 된 경우에만 옵션을 표시합니다.
예 ! 사용자 지정 후크는 다른 후크의 변수를 표시할 수 있습니다.
const useOptions = (): [
SelectedOption[] | undefined,
boolean
] => {
const [options, setOptions] = useState<SelectedOption[] | undefined>();
const [data, isLoading, setLoading] = useData();
useEffect(() => {
setLoading(true)
}, []);
useEffect(() => {
if (data && !isLoading) {
const optionsResult = data
.map((e) => {
return { label: e.name, value: e.id };
})
setOptions(optionsResult);
setLoading(false);
}
}, [data, isLoading, setOptions]);
return [options, isLoading];
};
export default useOptions;
3. 구조 분해를 사용하여 사용자 지정 후크의 변수 표시
게시할 복잡한 양식과 같이 노출할 변수가 많은 큰 사용자 지정 후크가 있는 경우 개체에 모든 변수를 압축할 수 있습니다.
객체의 값을 업데이트하려면 이전 상태를 사용하고 새 값과 병합한 다음 업데이트 함수 내에서 반환합니다.
const [value, setValue] = useState({name:'tomato', type:'fruit', price:1.72})
setValue((prevState) => ({ ...prevState, price: 1.99 }))
// in your form component
const {name, type, price} = value;
4. 단순한 useEffect 선호
효과 후크에 DRY 원리를 사용합니다. 종속성이 많은 하나의 효과 후크만 생성하는 경우 종속성이 업데이트될 때마다 후크가 실행됩니다. 후크에 원치 않는 부작용이나 조건부 루프가 발생할 수 있습니다.
할 수 있을 때 작은 것으로 나누면 하나가 됩니다.
5. 컨텍스트와 리듀서 후크 결합
구성 요소 간에 변수를 공유해야 하고 Redux를 사용하고 싶지 않다면 이 두 후크를 결합할 수 있습니다.
초기 상태와 감속기 함수로 감속기 후크를 초기화합니다. 컨텍스트 제공자에 대한 값으로 상태 및 디스패치 기능을 제공하면 작업이 완료됩니다. 컨텍스트 공급자의 모든 자식은 상태 및 디스패치 작업에 액세스할 수 있습니다.
// Context component
const ContextWrapper: React.FC<ContextWrapperProps> = ({ children }) => {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<Context.Provider value={{ state, dispatch }}>
{children}
</Context.Provider>
);
};
export default ContextWrapper;
// Context file with reducer
interface ContextStateType {
data: Data[] | undefined;
}
export enum Types {
Get = 'GET_DATA',
Update = 'UPDATE_DATA',
}
interface Get {
type: Types.Get;
payload: Data[];
}
interface Update {
type: Types.Update;
payload: Data;
}
type ActionType = Get | Update;
export const initialState: ContextStateType = {
data: undefined,
};
// [...] file is cut
export const reducer = (
state: ContextStateType = initialState,
action: ActionType
): ContextStateType => {
let newState: ContextStateType;
switch (action.type) {
case Types.Get:
newState = { ...state, data: action.payload };
break;
case Types.Update: {
newState = updateData(state, action);
break;
}
default:
throw new Error('Unknown action');
}
return newState;
};
export const Context = createContext<{
state: ContextStateType;
dispatch: Dispatch<ActionType>;
}>({
state: initialState,
dispatch: () => null,
});
결론
일반적으로 몇 가지 구성 요소 간에 일부 변수를 공유해야 할 때 앱 및 React 컨텍스트의 단일 데이터 저장소로 Redux를 사용했습니다.
React 후크는 클래스 구성 요소의 수명 주기 메서드보다 사용하기 쉬운 훌륭한 도구입니다.
이것은 일반 영어로 된 나의 첫 번째 기사입니다. 이전 기사는 프랑스어로 되어 있으며 내 블로그에서 사용할 수 있습니다. 번역을 원하시면 댓글을 달아주시거나 로 연락주세요.
Reference
이 문제에 관하여(React 후크에 대한 다섯 가지 팁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fabienschlegel/five-tips-about-react-hooks-fik텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)