typescript에서 react-redux와 함께 반응 후크 사용
8341 단어 reacttypescriptreduxjavascript
React
도입
hooks . 다음과 같이 ReactJS와 함께 사용되는 많은 인기 라이브러리
React-Router ,
React-Redux ,
Material UI 등이 이제 후크 및 기능적 구성 요소를 지원합니다. 하지만
오늘 이 글에서는 스토어에 접근하는 새로운 방법과
사용하지 않고 기능 구성 요소에 디스패치
higher-order components , 후크가 막대한 더미를 줄이는 방법을 비교합니다.
boilerplate .
관련 기사:
Latest Features of Typescript 2020 release
1. ReactJS의 후크는 무엇입니까?
사진 제공: chuttersnap on Unsplash
반응하는 후크가 무엇인지 알고 있다면 다음으로 건너뛸 수 있습니다.
next section.
React Hook은 새로운 개념으로 도입되었습니다.
React 16.8 프로그래머가 UI에서 로직을 분리할 수 있는 기능을 제공합니다. 우리
상태는 반응 구성 요소에서만 사용된다는 것을 모두 알고 있으므로 논리가 있으면 어떻게 될까요?
해당 상태로 바인딩하고 여러 파일에서 사용하고 싶습니까? 당신은 강요
기능적 구성 요소로 만드는 JSX를 반환합니다. 자, 그게
동기 부여.
이제 함수형을 작성할 수 있습니다.
구성 요소 후크, 할 수 있습니다
반환할 수 있는 것을 제외하고 기능적 구성 요소에서 수행하는 모든 것
JSX가 아닌 모든 것. 후크 이름은 다음으로 시작합니다.
useEffect
와 같이 사용useState
등 엄격한 규칙은 아니지만후크를 식별하는 표준입니다.
2. React redux hooks: 클래스 대 기능적 구성 요소 비교
(전체 코드는
Code Sandbox
나는 간단한 클래스 구성 요소와 렌더링하는 기능적 구성 요소를 작성하고 있습니다.
사용자의 이름. 먼저 사용자의 이름을 전달하고 다음으로
구성 요소의 상점에서 이름을 선택하여
요소.
import * as React from "react";
import { connect } from "react-redux";
import { TReduxStore, TDispatch } from "./types";
import { AxiosPromise } from "axios";
import { getUser } from "./action";
type IStateProps = Pick<TReduxStore, "user">;
interface IDispatchProps {
getUser: (id: string) => AxiosPromise;
}
interface IProps extends IStateProps, IDispatchProps {}
class ShowUser extends React.Component<IProps> {
componentDidMount() {
this.props.getUser("1");
}
render() {
const { user } = this.props;
return !user ? "Loading..." : <div>User Name: {user.name}</div>;
}
}
const mapStateToProps = (state: TReduxStore): IStateProps => ({
user: state.user
});
const mapDispatchToProps = (dispatch: TDispatch): IDispatchProps => ({
getUser: id => dispatch(getUser(id))
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(ShowUser);
위는
traditional way of connecting your ReactJS component with the redux . 사용자 이름을 요청하고 표시하기 위해 많은 코드를 작성해야 합니다.
이제 기능적 구성 요소에서 동일한 것을 봅시다.
import * as React from "react";
import { useSelector, useDispatch } from "react-redux";
import { TReduxStore, TDispatch } from "./types";
import { getUser } from "./action";
type IStateProps = Pick<TReduxStore, "user">;
const ShowUser: React.FC = props => {
const dispatch = useDispatch<TDispatch>();
const { user } = useSelector<TReduxStore, IStateProps>(state => ({
user: state.user
}));
React.useEffect(() => {
dispatch(getUser("1"));
}, [dispatch]);
return !user ? <div>"Loading..."</div> : <div>User Name: {user.name}</div>;
};
export default ShowUser;
보시다시피 후크를 사용하여 줄 수를 거의 절반으로 줄였습니다. 나는
클래스 구성 요소를 사용하고 있으므로 설명하지 않겠습니다.
단편. 그래서 아래 FunctionalComponent.tsx에 대해서만 설명하고 있습니다.
3. 기능 구성 요소에서 useDispatch 및 useSelector react-redux 후크를 사용하는 방법은 무엇입니까?
어떻게 사용하는지 하나씩 알아볼까요?
useDispatch
그리고
useSelector
redux 스토어에서 데이터를 발송하고 선택합니다.
사진 제공: Chris Scott on Unsplash
useDispatch
redux 디스패치 함수를 가져오는 데 사용되는 useDispatch 후크
기능 구성 요소 또는 후크에서. 소요됩니다
generic type
데이터 디스패치의 매개변수를 받습니다. 일반적으로
{type: string, payload?: any}
하지만 여기서는 redux-thunk이므로그것의 유형은
ThunkDispatch<TReduxStore, {}, TAction>;
여기서TReduxStore
는 상점 유형이고TAction
는 {type: string, payload?: any}
입니다.useSelector
이름에서 알 수 있듯이 데이터를 선택하는 기능을 제공합니다.
당신의 redux 스토어에서. 하나의 매개변수를 사용합니다.
콜백, 전체 redux 상태를 전달하고
선택하려는 데이터를 반환합니다. 따라서 콜백 함수는
아래와 같이.
function (state) {
return ({
user: state.user
})
}
내가 쓴 것과 같은 것은 플랫 화살표 함수 형식으로
기능적 구성 요소. 두 가지 유형이 있습니다.
generic type . 하나는 redux 스토어의 유형이고 두 번째는
매장에서 선택하고 싶습니다. 내 코드에서는 다음과 같이 표현됩니다.
TReduxStore
및 IStateProps
각각.게시물Use react hooks with react-redux in typescript은 원래 garbagevalue.com에 게시되었습니다.
Reference
이 문제에 관하여(typescript에서 react-redux와 함께 반응 후크 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/garbagevalue/use-react-hooks-with-react-redux-in-typescript-42h5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)