ガイドモジュールの作成
20066 ワード
反応項目に反応器を適用するために,反応器モジュールを作製した.
reduceモジュールは、以下のすべての項目を含むJavaScriptファイルを表します.動作タイプ 動作作成関数 李杜瑟 +)初期状態 reduceを使用するために必要な上記の項目は、それぞれ異なるファイルに保存できます.
Ridex GitHub Repositoryに登録されているサンプルアイテムを見ると、コードは次のように分離されています. actions index.js reducers todo.js visibilityFilter.js index.js 上記の例では、アクションとリダイレクトは異なるファイルで定義されています.しかし、これらのコードは必ずしも別々ではない.逆に,開発中にコードを分けると不便になる可能性がある.
そこで,Reduserと動作関連コードを1つのファイルに集約して記述する.これをDucksモードと呼びます.reduceに関連するコードを分離する方法は不確定であるため,開発者は自由に分離することができる.
最初のRidexモジュールを作成します.srcディレクトリにmodulesディレクトリを作成します.counterが含まれます.コードを記述するためにjsファイルを作成しましょう.
todosモジュールも作ろうモジュールディレクトリで同じtodos.jsファイルを生成し、コードを記述します.
2つのreduceモジュールが作成されました.だから李杜も二つです.1つのプロジェクトに複数のディーラーがある場合は、1つのディーラーに統合して使用します.マージされたreducerをrootreducerと呼びます.
統合reducerの操作は、reduceに組み込まれた
modulesディレクトリにインデックスを付けます.jsを作成し、次のコードを記述します.
リカバリポイントを作成するタスクはsrcディレクトリのmainです.jsでやった
通常、counterとtodosサブリーダーが統合されていることがわかります.
反応項目に反応還元を適用する場合は、反応還元ライブラリを使用します.ライブラリをインストールします.
reduceモジュールは、以下のすべての項目を含むJavaScriptファイルを表します.
Ridex GitHub Repositoryに登録されているサンプルアイテムを見ると、コードは次のように分離されています.
そこで,Reduserと動作関連コードを1つのファイルに集約して記述する.これをDucksモードと呼びます.reduceに関連するコードを分離する方法は不確定であるため,開発者は自由に分離することができる.
カウンタモジュールの作成
最初のRidexモジュールを作成します.srcディレクトリにmodulesディレクトリを作成します.counterが含まれます.コードを記述するためにjsファイルを作成しましょう.
counter.js
/*액션 타입 만들기*/
//액션 타입을 문자열로 만들면 액션 타입을 수정해야 할 경우 예를 들어 INCREASE -> INCREASE_PRICE,
//해당 액션이 있는 생성함수를 모두 찾아서 수정해야하는 번거로운 일이 생긴다.
//따라서 액션타입을 상수로 선언해주면 선언부만 바꿔주면 되기 때문에 더욱 효율적이다.
//Ducks 패턴을 따를때에는 액션의 이름에 접두사를 넣어준다.
//이렇게 하면 다른 모듈과 액션 이름이 중복되는 것을 방지할 수 있다.
const SET_DIFF = 'counter/SET_DIFF';
const INCREASE = 'counter/INCREASE';
const DECREASE = 'counter/DECREASE';
/*액션 생성함수 만들기*/
// 액션 생성함수를 만들고 export 키워드를 사용하여 내보낸다.
// 컨테이너 컴포넌트에서 dispatch 를 이용할때 사용된다.
export const setDiff = diff => ({ type: SET_DIFF, diff });
export const increase = () => ({ type: INCREASE });
export const decrease = () => ({ type: DECREASE });
/*초기 상태 선언*/
const initialState = {
number: 0,
diff: 1
}
/*리듀서 선언*/
//리듀서는 export default 로 내보낸다.
export default function counter(state = initialState, action){
switch(action.type){
case SET_DIFF:
return{
...state,
diff: action.diff
}
case INCREASE:
return{
...state,
number: state.number + state.diff
}
case DECREASE:
return{
...state,
number: state.number - state.diff
}
default:
return state;
}
}
todosモジュールの作成
todosモジュールも作ろうモジュールディレクトリで同じtodos.jsファイルを生成し、コードを記述します.
todos.js
/*액션 타입 선언*/
const ADD_TODO = "todos/ADD_TODO";
const TOGGLE_TODO = "todos/TOGGLE_TODO";
/*액션 함수 선언*/
let nextId = 1;
export const addTodo = text => ({
type: ADD_TODO,
todo: {
id: nextId++,// id 에 nextId 값을 넘겨준 후, nextId 값에 1을 더한다.
text
}
});
export const toggleTodo = id => ({
type: TOGGGLE_TODO,
id
});
/*초기 상태 선언*/
//리듀서의 초기 상태는 꼭 객체 타입일 필요는 없다.
//배열이어도 되고, 원시 타입 (숫자, 문자, boolean 이여도 상관없다.)
const initialState = [ ];
/*리듀서 선언*/
export default function todos(state = initialState, action){
switch (action.type){
case ADD_TODO:
return state.concat(action.todo);
case TOGGLE_TODO:
return state.map(
todo =>
todo.id === action.id
? { ...todo, done: !todo.done }
: todo
)
default:
return state;
}
}
スーパーユーザーの作成
2つのreduceモジュールが作成されました.だから李杜も二つです.1つのプロジェクトに複数のディーラーがある場合は、1つのディーラーに統合して使用します.マージされたreducerをrootreducerと呼びます.
統合reducerの操作は、reduceに組み込まれた
combineReducers
関数を使用します.modulesディレクトリにインデックスを付けます.jsを作成し、次のコードを記述します.
index.js
import { combineReducers } from 'redux';
import counter from './counter'; // ./counter 위치에서 export 하는 리듀서를 가져온다
import todos from './todos'; // ./todos 위치에서 export 하는 리듀서를 가져온다
const rootReducer = combineReducers({
counter,
todos
});
export default rootReducer;
リドサイは合併した.スーパーユーザーが作成されたら、今すぐショップを作成しましょう.リカバリポイントを作成するタスクはsrcディレクトリのmainです.jsでやった
main.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { createStore } from 'redux';
import rootReducer from './modules';
const store = createStore(rootReducer); //스토어를 만든다.
console.log(store.getState());//스토어의 상태를 확인한다.
ReactDOM.render(<App />, document.getElementById('root'));
ショップが作成され、ショップの状態が出力されます.通常、counterとtodosサブリーダーが統合されていることがわかります.
console.log(store.getState());
コードを削除しましょう.応答項目への減益の適用
反応項目に反応還元を適用する場合は、反応還元ライブラリを使用します.ライブラリをインストールします.
$ yarn add react-redux
そしてmainjsでは、Appコンポーネントを囲むためにProviderというコンポーネントがロードされます.そしてstoreをProviderのアイテムに入れます.import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { createStore } from 'redux';
import rootReducer from './modules';
import { Provider } from 'react-redux';
const store = createStore(rootReducer); //스토어를 만든다.
console.log(store.getState());//스토어의 상태를 확인한다.
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
Providerのpropsを使用してstoreを入れ、アプリケーションをラップすることで、レンダリングされたコンポーネントにかかわらずReadenstoreにアクセスできます.Reference
この問題について(ガイドモジュールの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@hyunn/리덕스-모듈-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol