210715 Redux(1)
17578 ワード
カートの作成
//Cart.js
import React from 'react';
import { Table } from 'react-bootstrap';
function Cart() {
return (
<div>
<Table responsive>
<tr>
<th>#</th>
<th>상품명</th>
<th>수량</th>
<th>변경</th>
</tr>
<tr>
<td>1</td>
<td>Table cell</td>
<td>Table cell</td>
<td>Table cell</td>
</tr>
</Table>
</div>
)
}
export default Cart;
//App.js
<여러개 router들>
<Route path="/cart">
<Cart></Cart>
</Route>
localhost:3000/cart接続でこのような画面が表示されます.データをReduxに保持
npm install redux react-redux
yarn add redus react-redux
redux
propsを使用することなく、すべてのサブコンポーネントが同じ値を共有できるようにします(=stateを渡すためにpropsを複数回繰り返す必要はありません)index.js
Provider
import import { Provider } from 'react-redux';
<Provider>
で包む<App>
プロバイダによって囲まれたすべての構成部品は、支柱を必要とせずに状態を共有できます.createStore()関数を使用してステータスを作成し、プロバイダに渡します.
//index.js
let store = createStore(()=>{ return [{id: 0, name: '멋진신발', quan: 2}]})
ReactDOM.render(
..
<Provider store={store}>
<App />
</Provider>
..
);
storeのデータはpropsとして登録する必要があります.
厳密には、stateをpropsに変換して使用します.
export defaultを変更することもできます!
//Cart.js
function stateToProps(state){
return{
state: state //자유롭게 작명: state 하면 됨
}
}
export default connect(stateToProps)(Cart);
//connect(stateToProps)가 또다른 함수를 리턴하기 때문에 괄호 두개 써야함
//export default Cart;
現在はstateをpropsとして使用することができ、propsを使用するようにCart(props)
を書いてprops.state~
を使用すればよい.名前を印刷してみますfunction Cart(props) {
return (
<div>
<Table responsive>
<tr>
<th>#</th>
<th>상품명</th>
<th>수량</th>
<th>변경</th>
</tr>
<tr>
<td>1</td>
<td>{ props.state[0].name }</td>
<td></td>
<td></td>
</tr>
</Table>
</div>
)
}
データの変更
map関数を使用してカートアイテムの更新に+/-ボタンを作成
function Cart(props) {
return (
<div>
<Table responsive>
<tr>
<th>#</th>
<th>상품명</th>
<th>수량</th>
<th>변경</th>
</tr>
{
props.state.map((a, i) => {
return (
<tr key={i}>
<td>{a.id}</td>
<td>{a.name}</td>
<td>{a.quan}</td>
<td><button>+</button></td>
</tr>)
})
}
</Table>
</div>
)
}
redixを使用する第2の理由:state管理が簡単です.reducer()
使用//index.js
let defaultState = [
{id: 0, name: '멋진신발', quan: 2},
{id: 1, name: '멋진신발2', quan: 1}
]; //1. 따로 state변수를 만들고
function reducer(state = defaultState, action){
//2. reducer에 default 파라미터 문법으로 집어넣는다.
//(파라미터 입력 안하면 defaultState가 기본적으로 부여되는 파라미터가 됨)
return state
}
let store = createStore(reducer);
reduce内でデータ修正方式を定義すればいいです.function reducer(state = defaultState, action){
if( action.type === '증가'){
//액션.type === 수정방법이름(데이터 수정 조건)
//'증가'라는 요청이 들어올 경우 어떤 state를 리턴할지 정의함
let copy = [...state];
copy[0].quan++;
return copy
}
else{
return state
}
}
データの変更方法が定義されており、HTMLでボタンをクリックするとデータの変更方法を「追加」するようにコマンドできます.
dispatch()
関数の使用//Cart.js
<td><button onClick={()=>{ props.dispatch({ type: '증가'}) }}>+</button></td>
+
ボタンをクリックすると、数が1増えて成功!redux
は、複数の要素が存在する場合に特に有用である.stateデータにエラーが発生した場合は、Reduxのreducer
を確認するだけで、すべてのコンポーネントを検索する必要はありません.(reduceを使用してデータを変更できます)=
상태관리
シンプルReference
この問題について(210715 Redux(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@autumndr3ams/210715-Reduxテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol