React 와 Redux 의 연결
5432 단어 react-redux
이전 에는 Redux 문서 로 만 react-redux 를 알 고 한 동안 실천 한 후에 소스 코드 를 뒤 집 는 동시에 관련 정 리 를 하려 고 합 니 다.제 가 본 코드 의 npm 버 전 은 v 4.0.0 입 니 다.즉,React 버 전 은 0.14.x 입 니 다.
react-redux 는 두 가지 핵심 모듈 을 제공 합 니 다:Provider 와 connect.
Provider
Provider 이 모듈 은 전체 App 의 용기 로 서 기 존의 App Container 를 바탕 으로 한 층 더 포장 합 니 다.이 모듈 의 작업 은 매우 간단 합 니 다.바로 Redux 의 store 를 props 로 받 아들 이 고 context 의 속성 중 하나 로 설명 하 는 것 입 니 다.하위 구성 요 소 는 contextTypes 를 설명 한 후에 this.context.store 를 통 해 store 에 편리 하 게 접근 할 수 있 습 니 다.그러나 우리 구성 요 소 는 일반적으로 이렇게 할 필요 가 없습니다.store 를 context 에 넣 는 것 은 아래 connect 에 사용 하기 위해 서 입 니 다.
이것 은 Provider 의 사용 예시 입 니 다:
// config app root
const history = createHistory()
const root = (
<Provider store={store} key="provider">
<Router history={history} routes={routes} />
</Provider>
)
// render
ReactDOM.render(
root,
document.getElementById('root')
)
connect이 모듈 은 진정한 의미 에서 Redux 와 React 를 연결 한 셈 입 니 다.마침 이름 도 connect 입 니 다.
먼저 Redux 가 어떻게 작 동 하 는 지 고려 합 니 다.먼저 store 에서 state 를 유지 하고 dispatch 는 action 을 하 며 그 다음 에 reducer 는 이 action 에 따라 state 를 업데이트 합 니 다.
우리 의 React 응용 프로그램 에 비 추어 store 에서 유지 하 는 state 는 바로 우리 의 app state 입 니 다.하나의 React 구성 요 소 는 View 층 으로 두 가지 일 을 합 니 다.render 와 응답 사용자 작업 입 니 다.따라서 connect 는 store 에 필요 한 데 이 터 를 props 로 React 구성 요소 에 render 로 전달 하고 action creator 를 포장 하여 사용자 의 작업 에 응답 할 때 dispatch action 을 사용 합 니 다.
자,connect 이 모듈 이 무엇 을 했 는 지 자세히 보 세 요.먼저 사용 한 API 는 다음 과 같 습 니 다.
connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])
mapStateToProps 는 함수 입 니 다.반환 값 은 merge 가 props 에 들 어가 야 하 는 state 를 표시 합 니 다.기본 값 은()=>({})입 니 다.아무것도 전달 하지 않 습 니 다.
(state, props) => ({ }) //
mapDispatchToProps 는 함수 일 수 있 습 니 다.반환 값 은 merge 가 props 만 필요 한 actionCreators 를 표시 합 니 다.여기 actionCreator 는 dispatch 로 포장 되 어 있 을 것 입 니 다.redux 의 bidActionCreators 함 수 를 추천 합 니 다.
(dispatch, props) => ({ //
...bindActionCreators({
...ResourceActions
}, dispatch)
})
더 편리 한 것 은 대상 을 직접 받 아들 일 수 있 습 니 다.이때 connect 함수 내 부 는 이 함 수 를 함수 로 바 꿉 니 다.이 함 수 는 위의 예 와 똑 같 습 니 다.mergeProps 는 merge 프로 세 스 를 사용자 정의 하 는 데 사 용 됩 니 다.다음은 기본 프로 세 스 입 니 다.parentProps 값 은 구성 요소 자체 의 props 입 니 다.구성 요소 의 props 에 같은 이름 이 나타 나 면 덮어 쓸 수 있 습 니 다.
(stateProps, dispatchProps, parentProps) => ({
...parentProps,
...stateProps,
...dispatchProps
})
options 는 모두 두 개의 스위치 가 있 습 니 다.Pure 는 최 적 화 를 열 었 는 지 여부 입 니 다.자세 한 내용 은 다음 과 같 습 니 다.기본 값 은 true 입 니 다.withRef 는 안에 포 장 된 구성 요소 에 ref 를 사용 합 니 다.getWrapped Instance 방법 으로 이 ref 를 얻 을 수 있 습 니 다.기본 값 은 false 입 니 다.connect 는 함 수 를 되 돌려 줍 니 다.React 구성 요소 의 구조 함 수 를 연결 대상 으로 받 아들 여 연 결 된 구성 요소 구조 함 수 를 되 돌려 줍 니 다.
그리고 몇 가지 질문:
trySubscribe() {
if (shouldSubscribe && !this.unsubscribe) {
this.unsubscribe = this.store.subscribe(::this.handleChange)
this.handleChange()
}
}
handleChange () {
this.setState({
storeState: this.store.getState()
})
}
그러나 일반적으로 우리 가 연결 하 는 것 은 어떤 Container 구성 요소 입 니 다.모든 App state 를 탑재 하지 않 습 니 다.그러나 우리 의 handler 는 모든 state 변화 에 응답 합 니 다.그래서 우 리 는 최적화 해 야 할 것 은 store State 가 변화 할 때 우리 가 그 부분의 state 변화 에 진정 으로 의존 할 때 만 해당 하 는 React 구성 요 소 를 다시 렌 더 링 합 니 다.그러면 우리 가 진정 으로 의존 하 는 부분 은 무엇 입 니까?mapStateToProps 와 mapDispatchToProps 를 통 해 얻 은 것 입 니 다.구체 적 으로 최 적 화 된 방식 은 shouldComponentUpdate 에서 검 사 를 하 는 것 입 니 다.구성 요소 자체 의 props 가 바 뀌 거나 mapStateToProps 의 결과 가 바 뀌 거나 mapDispatchToProps 의 결과 가 바 뀌 었 을 때 shouldComponentUpdate 가 true 로 돌아 갈 수 있 습 니 다.검사 하 는 방식 은 shallow Equal 의 비교 입 니 다.
그래서 어떤 reducer 에 게:
export default (state = {}, action) => {
return { ...state } // , reRender
// return state // reRender
}
또한 connect 를 할 때 맵 이 진정 으로 필요 로 하 는 state 나 actionCreators 를 props 에 조심 하여 불필요 한 성능 손실 을 피해 야 합 니 다.마지막 으로 connect 의 API 에 따 르 면 ES7 decorator 기능 을 사용 하여 React ES6 의 쓰기 에 맞 출 수 있 습 니 다.
@connect(
state => ({
user: state.user,
resource: state.resource
}),
dispatch => ({
...bindActionCreators({
loadResource: ResourceActions.load
}, dispatch)
})
)
export default class Main extends Component {
}
OK.이상 이 바로 본문의 전체 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React Redux : 공식 사이트 "Basic Tutorial"의 작례를 후크로 다시 작성React 16.8부터 함수 컴포넌트에 React 기능 추가 가 도입되었습니다. 다리를 맞추고 React Redux 7.1.0에 갖추어진 것이 Redux에 연결한다 입니다. React Redux 공식 「 」의 작례 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.