React Hooks ✖️ Redux를 사용해보고 나름대로 막힌 곳을 정리해 보았다
9768 단어 react-reduxReactreduxreact-hooks
이 기사는 React Hooks, redux를 사용하는데 있어서, 자신이 막힌 곳에 대해서 쓰고 있습니다.
각각의 개별 설명에 대해서는 공식 문서 또는 다른 기사를 읽으십시오
참고로 한 기사
Redux Hooks의 편안함 dispatch & states
React Hooks에서 redux / react-redux로 한 일을 다양하게 시도하십시오.
🎉React 16.8 : 정식 버전이 된 React Hooks를 이제 굉장히
이 기사의 대상 독자
내 개발 환경
이번에 만드는 것
액션 만들기
src/actions/action.js
에 action 을 정의합니다.
이번에는 더하거나 빼기만 하기 때문에 이 두 가지로 좋을 것입니다.
action.js
export const incrementAction = () => ({
type: 'INCREMENT',
});
export const decrementAction = () => ({
type: 'DECREMENT',
});
reducer 만들기
src/reducers/counterReducer.js
에 reducers 를 정의합니다.
이번에는 combineReducers를 사용하여 rootReducer로 각각의 reducer를 정리하는 형태로했습니다.
rootReducer.jsconst rootReducer = combineReducers({
counterReducer,
});
export default rootReducer
counterReducer.jsconst initialState = {
counter: 0,
};
export default function counterReducer(state = initialState, action) {
switch (action.type) {
case "INCREMENT":
return {counter: state.counter + 1}
case "DECREMENT":
return {counter: state.counter - 1}
}
return {counter: state.counter}
}
이때 주의해야 하는 점이, return할 때 연상 배열의 형태로 하는 것입니다!
나는 state + 1
또는 state.counter + 1
하고 있었기 때문에 잘 전달되지 않았습니다.
store 만들기
react-create-app
로 병아리를 만든 경우 src/index.js
가 있으므로 거기에 써 갑시다!
ReactDOM.render 파일에서 createStore에 rootReducer를 전달합니다.
작성한 store를 Provider에 건네주어 아래의 컴퍼넌트에서도 사용할 수 있도록 합니다.
index.jsconst store = createStore(rootReducer);
ReactDOM.render(
<Provider store={store}>
<App/>
</Provider>,
document.getElementById('root')
);
전화
index.js
그리고 호출하고 있는 컴퍼넌트로 위에서 정의한 것을 호출해 갑니다.react-create-app
로 병아리를 만든 경우 src/App.js
입니다!
App.jsexport default function App() {
const dispatch = useDispatch()
const counter = useSelector(state => state.counterReducer.counter);// 使用するreducerを引数に渡す。
return (
<div className="App">
<p> count: {counter} </p>
<button onClick={() => dispatch(incrementAction())}>たす</button>
<button onClick={() => dispatch(decrementAction())}>ひく</button>
</div>
);
}
이때 주의해야 하는 점이, useSelector에 인수를 건네줄 때 제대로 reducer를 지정해 건네주는 것입니다!
reducer를 root로 정리하고 있으므로 useSelector(state => state.counter)
와 같이 해 버리면 당연합니다만 undefind
이상으로 완료입니다, 페이지에 액세스 해 봅시다.
요약
이번에 처음으로 React Hooks를 사용해 보았습니다만 매우 편리하네요!
아직 나온 지 얼마 안된 자료도 별로 없었기 때문에, 나와 같은 초초자라도 알 수 있도록(듯이) 내가 막히거나 한 곳을 정중하게 써 보았습니다.
React를 쓰는 것은 처음이므로이 쓰기는 이상합니다! 이쪽이 좋다! 같은 지적이 있으면 꼭 코멘트 등 주시면 좋겠습니다.
Reference
이 문제에 관하여(React Hooks ✖️ Redux를 사용해보고 나름대로 막힌 곳을 정리해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/7777110/items/fb6bc5605ce783e2d74e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
export const incrementAction = () => ({
type: 'INCREMENT',
});
export const decrementAction = () => ({
type: 'DECREMENT',
});
src/reducers/counterReducer.js
에 reducers 를 정의합니다.이번에는 combineReducers를 사용하여 rootReducer로 각각의 reducer를 정리하는 형태로했습니다.
rootReducer.js
const rootReducer = combineReducers({
counterReducer,
});
export default rootReducer
counterReducer.js
const initialState = {
counter: 0,
};
export default function counterReducer(state = initialState, action) {
switch (action.type) {
case "INCREMENT":
return {counter: state.counter + 1}
case "DECREMENT":
return {counter: state.counter - 1}
}
return {counter: state.counter}
}
이때 주의해야 하는 점이, return할 때 연상 배열의 형태로 하는 것입니다!
나는
state + 1
또는 state.counter + 1
하고 있었기 때문에 잘 전달되지 않았습니다.store 만들기
react-create-app
로 병아리를 만든 경우 src/index.js
가 있으므로 거기에 써 갑시다!
ReactDOM.render 파일에서 createStore에 rootReducer를 전달합니다.
작성한 store를 Provider에 건네주어 아래의 컴퍼넌트에서도 사용할 수 있도록 합니다.
index.jsconst store = createStore(rootReducer);
ReactDOM.render(
<Provider store={store}>
<App/>
</Provider>,
document.getElementById('root')
);
전화
index.js
그리고 호출하고 있는 컴퍼넌트로 위에서 정의한 것을 호출해 갑니다.react-create-app
로 병아리를 만든 경우 src/App.js
입니다!
App.jsexport default function App() {
const dispatch = useDispatch()
const counter = useSelector(state => state.counterReducer.counter);// 使用するreducerを引数に渡す。
return (
<div className="App">
<p> count: {counter} </p>
<button onClick={() => dispatch(incrementAction())}>たす</button>
<button onClick={() => dispatch(decrementAction())}>ひく</button>
</div>
);
}
이때 주의해야 하는 점이, useSelector에 인수를 건네줄 때 제대로 reducer를 지정해 건네주는 것입니다!
reducer를 root로 정리하고 있으므로 useSelector(state => state.counter)
와 같이 해 버리면 당연합니다만 undefind
이상으로 완료입니다, 페이지에 액세스 해 봅시다.
요약
이번에 처음으로 React Hooks를 사용해 보았습니다만 매우 편리하네요!
아직 나온 지 얼마 안된 자료도 별로 없었기 때문에, 나와 같은 초초자라도 알 수 있도록(듯이) 내가 막히거나 한 곳을 정중하게 써 보았습니다.
React를 쓰는 것은 처음이므로이 쓰기는 이상합니다! 이쪽이 좋다! 같은 지적이 있으면 꼭 코멘트 등 주시면 좋겠습니다.
Reference
이 문제에 관하여(React Hooks ✖️ Redux를 사용해보고 나름대로 막힌 곳을 정리해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/7777110/items/fb6bc5605ce783e2d74e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const store = createStore(rootReducer);
ReactDOM.render(
<Provider store={store}>
<App/>
</Provider>,
document.getElementById('root')
);
index.js
그리고 호출하고 있는 컴퍼넌트로 위에서 정의한 것을 호출해 갑니다.react-create-app
로 병아리를 만든 경우 src/App.js
입니다!App.js
export default function App() {
const dispatch = useDispatch()
const counter = useSelector(state => state.counterReducer.counter);// 使用するreducerを引数に渡す。
return (
<div className="App">
<p> count: {counter} </p>
<button onClick={() => dispatch(incrementAction())}>たす</button>
<button onClick={() => dispatch(decrementAction())}>ひく</button>
</div>
);
}
이때 주의해야 하는 점이, useSelector에 인수를 건네줄 때 제대로 reducer를 지정해 건네주는 것입니다!
reducer를 root로 정리하고 있으므로
useSelector(state => state.counter)
와 같이 해 버리면 당연합니다만 undefind
이상으로 완료입니다, 페이지에 액세스 해 봅시다.
요약
이번에 처음으로 React Hooks를 사용해 보았습니다만 매우 편리하네요!
아직 나온 지 얼마 안된 자료도 별로 없었기 때문에, 나와 같은 초초자라도 알 수 있도록(듯이) 내가 막히거나 한 곳을 정중하게 써 보았습니다.
React를 쓰는 것은 처음이므로이 쓰기는 이상합니다! 이쪽이 좋다! 같은 지적이 있으면 꼭 코멘트 등 주시면 좋겠습니다.
Reference
이 문제에 관하여(React Hooks ✖️ Redux를 사용해보고 나름대로 막힌 곳을 정리해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/7777110/items/fb6bc5605ce783e2d74e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(React Hooks ✖️ Redux를 사용해보고 나름대로 막힌 곳을 정리해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7777110/items/fb6bc5605ce783e2d74e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)