「言外の意味」を使用したレスポンス・プログラムのステータス2
44959 ワード
目次
17.1作業環境の設定
17.2 UIの準備
17.3リデスに関するコードの作成
定義
定義
17.4応答アプリケーションの冗長性の導入
17.5コンテナ構成部品の作成
作成
17.6 Ridexの方が快適
17.7 Hooksを使用したコンテナ構成部品の作成
17.5コンテナ構成部品の作成
素子から回復点に近づき,所望の状態を得,動作もdispatchする.リカバリポイントに関連付けられた構成部品をコンテナ構成部品と呼びます.
17.5.1. ComputerContainerの作成
// containers/CounterContainer.js
import React from 'react';
import Counter from '../components/Counter';
const CounterContainer = () => {
return <Counter />;
};
export default CounterContainer
上記の構成部品を冗長性に関連付けるには、react-reducxが提供するconnect関数を使用する必要があります.connect関数の使い方は次のとおりです.connect(mapStateToProps, mapDispatchToProps)(연동할 컴포넌트)
ここでmapStateToPropsは、リカバリポイントの状態をコンポーネントのpropsに渡す関数です.mapDispatchToPropsは、動作作成関数をコンポーネントに渡すためのpropsの関数です.さらに具体化すると、
const makeContainer = connect(mapStateToProps, mapDispatchToProps)makeContainer(타깃 컴포넌트)
と書くことができる.connect関数を呼び出すと、別の関数が返されます.戻り関数にエレメントをパラメータとして入れると、ガイドに関連付けられたエレメントが作成されます.
// containers/CounterContainer.js
import React from 'react';
import {connect} from 'react-redux';
import Counter from '../components/Counter';
const CounterContainer = ({number, increase, decrease}) => {
return (
<Counter number={number} onIncrease={increase} onDecrease={decrease} />
);
};
const mapStateToProps = state => ({
number: state.counter.number,
});
const mapDispatchToProps = dispatch => ({
// 임시 함수
increase: () => {
console.log('increase');
},
decrease: () => {
console.log('decrease');
},
});
export default connect(mapStateToProps, mapDispatchToProps)(CounterContainer);
mapStateToPropsとmapDispatchPropsから返されるオブジェクト内部の値は、コンポーネントのpropsに渡されます.mapStateToPropsは、現在の店舗が持つ状態を示すstateをパラメータとして受け入れます.mapDispatchToPropsの場合、storeの内蔵関数dispatchをパラメータとして受信します.mapDispatchToProps一時コンソールは、プロセスを説明するために使用されます.logを使用しています.
さらに
(CounterContainer)
を加え、mapStateToProps、mapDispatchToPropsをComputeContainerにバインドします.AppでCounterContainerを使用してCounterを置き換えます.
import React from 'react';
import Todos from './components/Todos';
import CounterContainer from './containers/CounterContainer';
const App = () => {
return (
<div>
<CounterContainer />
<hr />
<Todos />
</div>
);
};
export default App;
// containers/CounterContainer.js
import React from 'react';
import {connect} from 'react-redux';
import Counter from '../components/Counter';
// 액션 생성함수 increase, decrease
import {increase, decrease} from '../modules/counter';
const CounterContainer = ({number, increase, decrease}) => {
return (
<Counter number={number} onIncrease={increase} onDecrease={decrease} />
);
};
const mapStateToProps = state => ({
number: state.counter.number,
});
const mapDispatchToProps = dispatch => ({
increase: () => {
dispatch(increase());
},
decrease: () => {
dispatch(decrease());
},
});
export default connect(
mapStateToProps,
mapDispatchToProps,
)(CounterContainer);
console.log()
の代わりに動作生成関数(import {increase, decrease} from '../module/counter'
)を呼び出して動作オブジェクトを作成し、dispatchを行う.//container/CounterContainer.js
import React from "react";
import { connect } from "react-redux";
import Counter from "../components/Counter";
// 액션 생성함수 increase, decrease
import { increase, decrease } from "../modules/counter";
const CounterContainer = ({ number, increase, decrease }) => {
return (
<Counter number={number} onIncrease={increase} onDecrease={decrease} />
);
};1
export default connect(
(state) => ({
number: state.counter.number,
}),
(dispatch) => ({
increase: () => dispatch(increase()),
decrease: () => dispatch(decrease()),
})
)(CounterContainer);
bindActionCreatorsを使用した各アクション生成関数を呼び出し、割り当てパッケージを使用してコンポーネントにアクションを割り当てるのは面倒です.動作生成関数が多ければ多いほど面倒になります.この場合、reduceのbindActionCreatorsユーティリティ関数を使うと便利です.
// containers/CounterContainer.js
import React from "react";
import { bindActionCreators } from "redux";
import { connect } from "react-redux";
import Counter from "../components/Counter";
import { increase, decrease } from "../modules/counter";
const CounterContainer = ({ number, increase, decrease }) => {
return (
<Counter number={number} onIncrease={increase} onDecrease={decrease} />
);
};
export default connect(
(state) => ({
number: state.counter.number,
}),
(dispatch) =>
bindActionCreators(
{
increase,
decrease,
},
dispatch
)
)(CounterContainer);
checkここでいう関数形式パラメータは何ですか
// containers/CounterContainer.js
import React from 'react';
import {connect} from 'react-redux';
import Counter from '../components/Counter';
import {increase, decrease} from '../modules/counter';
const CounterContainer = ({number, increase, decrease}) => {
return (
<Counter number={number} onIncrease={increase} onDecrease={decrease} />
);
};
export default connect(
state => ({
number: state.counter.number,
}),
{
increase,
decrease,
},
)(CounterContainer);
上記のように、2番目のパラメータをオブジェクトとして挿入すると、connect関数はbindActionCreatorsの代わりに内部で動作します.チェックここで2番目のパラメータは何ですか?
作成17.5.2 TodosContainer
コードはconnect関数,mapDispatchToPropsの短い書き方を用いて記述した.
// container/TodosContainer.js
import React from 'react';
import {connect} from 'react-redux';
import {changeInput, insert, toggle, remove} from '../modules/todos';
import Todos from '../components/Todos';
const TodosContainer = ({
input,
todos,
changeInput,
insert,
toggle,
remove,
}) => {
return (
<Todos
input={input}
todos={todos}
onChangeInput={changeInput}
onInsert={insert}
onToggle={toggle}
onRemove={remove}
/>
);
};
export default connect(
({todos}) => ({
input: todos.input,
todos: todos.todos,
}),
{
changeInput,
insert,
toggle,
remove,
},
)(TodosContainer);
todosモジュールで記述された動作生成関数と状態の値を素子のpropsに渡す.コンテナ構成部品が完成したら、App構成部品のTodos構成部品をTodosContainer構成部品に置き換えます.
//App.js
import React from 'react';
import CounterContainer from './containers/CounterContainer';
import TodosContainer from './containers/TodosContainer';
const App = () => {
return (
<div>
<CounterContainer />
<hr/>
<TodosContainer/>
</div>
);
};
export default App;
// components/Todos.js
import React from "react";
const TodoItem = ({ todo, onToggle, onRemove }) => {
return (
<div>
<input
type="checkbox"
onClick={() => onToggle(todo.id)}
checked={todo.done}
readOnly={true}
/>
<span style={{ textDecoration: todo.done ? "line-through" : "none" }}>
{todo.text}
</span>
<button onClick={() => onRemove(todo.id)}>삭제</button>
</div>
);
};
const Todos = ({
input,
todos,
onChangeInput,
onInsert,
onToggle,
onRemove,
}) => {
const onSubmit = (e) => {
e.preventDefault();
onInsert(input);
onChangeInput("");
};
const onChange = (e) => onChangeInput(e.target.value);
return (
<div>
<form onSubmit={onSubmit}>
<input value={input} onChange={onChange} />
<button type="submit">등록</button>
</form>
<div>
{todos.map((todo) => (
<TodoItem
todo={todo}
key={todo.id}
onToggle={onToggle}
onRemove={onRemove}
/>
))}
</div>
</div>
);
};
export default Todos;
Reference
この問題について(「言外の意味」を使用したレスポンス・プログラムのステータス2), 我々は、より多くの情報をここで見つけました https://velog.io/@donggu/말로-풀어쓴-React-리덕스를-사용하여-리액트-애플리케이션-상태-관리하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol