TIL_Redux
リデスって何?
自己紹介
JavaScriptアプリケーションで予測可能な状態管理のコンテナライブラリを提供
基本概念
1.同じデータは常に同じ場所から(single source of truth)
2.ステータスは常に読み取り専用(state is read-only)
3.変更は純関数のみ(純関数で変更)
だからなぜリデスが必要なのか。
どんなことがあっても、順序が複雑で、コードが複雑で、利害関係が複雑であれば、そのことはいつか覆されるだろう.
reduceは、データを集中的に管理し、応答に関連するコードを大幅に簡素化します.
用語集
store
管理可能な状態は1つしかありません
レスポンスでstateを交換するには、stateをサブエレメントから親エレメントに昇格します.
再びstateを必要なサブコンポーネントに渡す必要があります.
ただし、stateは、構成部品に格納するのではなくreduxstoreに格納して情報を取得できます.
action
JAvascriptオブジェクト.オブジェクトには複数のデータが含まれており、actionオブジェクトはアプリケーションのデータをstoreに転送します.
typeは指定する必要があります.
reducer
現在のステータスとactionを使用して次のステータスを作成
データストリームはaction 객체 => Dispatch => Reducer => Store(New State)
です.
(actionオブジェクトがdispatchメソッドに渡され、dispatchメソッドがreduceを呼び出す)
じょうちょうデータストリーム
1.初めてデータを読み取る場合、store
に記憶されているstate
を読み出し、UI
に表示する.
2.UI
においてevent
Dispatch
メソッドを生成し、action
オブジェクトをreducer
に渡す.
3.reducer
は、伝達されたaction
オブジェクトを反映する新しいstate
を作成し、UI
に伝達する.
4.必要に応じて繰り返す
Reduxの利点
どんなことがあっても、順序が複雑で、コードが複雑で、利害関係が複雑であれば、そのことはいつか覆されるだろう.
reduceは、データを集中的に管理し、応答に関連するコードを大幅に簡素化します.
用語集
store
管理可能な状態は1つしかありません
レスポンスでstateを交換するには、stateをサブエレメントから親エレメントに昇格します.
再びstateを必要なサブコンポーネントに渡す必要があります.
ただし、stateは、構成部品に格納するのではなくreduxstoreに格納して情報を取得できます.
action
JAvascriptオブジェクト.オブジェクトには複数のデータが含まれており、actionオブジェクトはアプリケーションのデータをstoreに転送します.
typeは指定する必要があります.
reducer
現在のステータスとactionを使用して次のステータスを作成
データストリームはaction 객체 => Dispatch => Reducer => Store(New State)
です.
(actionオブジェクトがdispatchメソッドに渡され、dispatchメソッドがreduceを呼び出す)
じょうちょうデータストリーム
1.初めてデータを読み取る場合、store
に記憶されているstate
を読み出し、UI
に表示する.
2.UI
においてevent
Dispatch
メソッドを生成し、action
オブジェクトをreducer
に渡す.
3.reducer
は、伝達されたaction
オブジェクトを反映する新しいstate
を作成し、UI
に伝達する.
4.必要に応じて繰り返す
Reduxの利点
1.初めてデータを読み取る場合、
store
に記憶されているstate
を読み出し、UI
に表示する.2.
UI
においてevent
Dispatch
メソッドを生成し、action
オブジェクトをreducer
に渡す.3.
reducer
は、伝達されたaction
オブジェクトを反映する新しいstate
を作成し、UI
に伝達する.4.必要に応じて繰り返す
Reduxの利点
reduceは純粋な関数なので、次の状態が何であるかを簡単に予測できます.
メンテナンスが容易な
コンポーネント間でデータを交換する場合は、エラーが検出されたときにすべての関連コードを変更する必要がありますが、reduxを使用すると必要なコード
actionとstate logを記録すると、actionが発生したときに発生したすべてのことを追跡できます.
プロセスの理解が容易なため、検証が必要なデータやプロセスを簡単にテストできます.
コーディング方法
storeconst store = createStore(rootReducer);
すべてのstate
は、単一のリポジトリとして機能します.
上記の例では、createStore
メソッドを使用してreducer
を接続している.store
の作成に加えて、他のReduserの組合せをパラメータとして店舗を作成することもできる.
実際のソースコードでは、ミドルウェアとredux devtoolsを接続するために、2番目のパラメータには他の内容も含まれています.
actionfunction addTodo(text) {
return {
type: ADD_TODO,
// 이 아래에 내용을 적는다
dothiswork : // 반영할 내용
}
}
type
は必ず含まなければならない内容であり、それ以外は選択して使用することもできる.action
でステータスのすべての変更を実現することで、アプリケーションがどのように変化したかを直感的に理解できます.
dispatchconst handleClick = (item) => {
if(!todoLists.map((el) => el.todoId).includes(item.id)) {
dispatch(notify('todo 리스트에 추가되었습니다')
}
}
dispatch
はaction
を伝達する方法である.dispatch
の伝達因子として、action
オブジェクトを伝達し、reducer
を呼び出し、state
値を変更する役割を果たす.
reducerconst todoReducer = (state = initialState, action) => {
switch (action.type) {
case ADD_TO_LIST:
return Object.assign({}, state, {
todoLists: [...state.todolists, action.dothiswork]
})
default:
return state;
}
}
reducer
は、通常、上記のコードから構成される.switch
の代わりにif
を使用してもよい.
に注意reducer
を記述する場合、redux
のstate
更新は、不変の方法で変更されなければならない.(Object.assign
等)
redux hooksの典型的な方法
useSelector()
構成部品とステータスを接続する役割を果たします.
構成部品では、storeの状態にuseSelector
方法でアクセスすることができる.import React from 'react'
import { useSelector } from 'react-redux'
export const TodoListItem = props => {
const todo = useSelector(state => state.todos[props.id])
return <div>{todo.text}</div>
}
useDispatch()
action
オブジェクトをreducer
に伝達する役割を果たす.
イベントの発生に使用される構成部品.import React from 'react'
import { useDispatch } from 'react-redux'
export const CounterComponent = ({ value }) => {
const dispatch = useDispatch()
return (
<div>
<span>{value}</span>
<button onClick={() => dispatch({ type: 'increment-counter' })}>
Increment counter
</button>
</div>
)
}
Reference
この問題について(TIL_Redux), 我々は、より多くの情報をここで見つけました
https://velog.io/@ccrjun/TILRedux
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
const store = createStore(rootReducer);
function addTodo(text) {
return {
type: ADD_TODO,
// 이 아래에 내용을 적는다
dothiswork : // 반영할 내용
}
}
const handleClick = (item) => {
if(!todoLists.map((el) => el.todoId).includes(item.id)) {
dispatch(notify('todo 리스트에 추가되었습니다')
}
}
const todoReducer = (state = initialState, action) => {
switch (action.type) {
case ADD_TO_LIST:
return Object.assign({}, state, {
todoLists: [...state.todolists, action.dothiswork]
})
default:
return state;
}
}
import React from 'react'
import { useSelector } from 'react-redux'
export const TodoListItem = props => {
const todo = useSelector(state => state.todos[props.id])
return <div>{todo.text}</div>
}
import React from 'react'
import { useDispatch } from 'react-redux'
export const CounterComponent = ({ value }) => {
const dispatch = useDispatch()
return (
<div>
<span>{value}</span>
<button onClick={() => dispatch({ type: 'increment-counter' })}>
Increment counter
</button>
</div>
)
}
Reference
この問題について(TIL_Redux), 我々は、より多くの情報をここで見つけました https://velog.io/@ccrjun/TILReduxテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol