reactステータス管理プラグインfluxおよびreduxステータスマネージャ
20969 ワード
ステータス管理
1.flux
Reactは自分がMVCの中のVの部分であることを標榜し、FluxはMとCを追加する部分に相当する.
FluxはFacebookが使用するフロントエンドアプリケーションのアーキテクチャモデルです.
プロセス:
viewトリガaction
Action通知dispatcher(ディスパッチ)
dispatcher通知倉庫変更状態
storeウェアハウスステータスの変更が完了したら、ページの再レンダリングを通知します.
インストール:
ステップ1:倉庫の作成
/src/store/index.js
ステップ2:ページコンポーネントに倉庫を導入し、倉庫のデータを使用する
この時点では倉庫からしかデータを取得できません
ステップ3:ページからイベントを開始したい場合は、倉庫のデータを変更します.
fluxからDispatcherディスパッチを引き出し、データを変更するディスパッチタスクを登録します.
/src/store/index.js
Actionは形参ですtypeは、どのようなデータ操作を実行するかを判断するためのカスタム属性です.
action.paramsは、データを受信するためのカスタム属性です.
ページコンポーネントでdispatcherを使用して、データを変更するための特定のタスクを配布できます.
この場合、倉庫のデータは変更されますが、ページには変更されません.
倉庫内のデータが変化すると、ページが再レンダリングされます.
/src/store/index.jsイベントリスナーの導入
ページコンポーネントのマウント完了フック関数で、ウェアハウス内のデータの変化を監視するために使用されます.
2.redux
Reduxは、2015年にDan Abramovによって作成された科学技術用語です.2014年のFacebookのFluxアーキテクチャと関数式プログラミング言語Elmに啓発されました.すぐに、Reduxはその簡単で学びやすい体積が小さいため、短時間で最も人気のあるフロントエンドアーキテクチャとなっています.
Reduxは主にアプリケーション状態の管理として用いられる.簡単に言えば、Reduxはアプリケーション全体の状態を個別の定数状態ツリー(オブジェクト)で保存し、このオブジェクトを直接変更することはできません.いくつかのデータが変化すると、新しいオブジェクトが作成されます(actionsとreducersを使用します).
reduxコアコンセプト:
actions
store
reducers
reduxの3つの原則:
単一データソース
stateは読み取り専用です
純粋な関数を使用してstateを変更する
(1)取付
(2)基本文法
プロセス:
CreateStoreの導入
初期状態の定義
純関数の定義
倉庫の定義
サンプルコード:
①createStoreの導入
/src/store/index.js
②初期状態の定義
③純関数の定義
state前回の変更が完了した状態
Actionはコンポーネントdipatchの動作です
reducerは必ず新しいstateを返さなければなりません.そうしないとstateの変化は検出されません.
④倉庫の作成
⑤ページコンポーネント使用状態
倉庫に入れる
ウェアハウス内のデータの使用
⑥状態を変える
⑦サブスクライバによるデータ変更ページの変更
1.flux
Reactは自分がMVCの中のVの部分であることを標榜し、FluxはMとCを追加する部分に相当する.
FluxはFacebookが使用するフロントエンドアプリケーションのアーキテクチャモデルです.
プロセス:
viewトリガaction
Action通知dispatcher(ディスパッチ)
dispatcher通知倉庫変更状態
storeウェアハウスステータスの変更が完了したら、ページの再レンダリングを通知します.
インストール:
npm i flux --save
ステップ1:倉庫の作成
/src/store/index.js
let state = {
name:'flux name',
age:18
}
export default { state }
ステップ2:ページコンポーネントに倉庫を導入し、倉庫のデータを使用する
import React, {
Component } from 'react'
import store from '../store'
export default class Setting extends Component {
render() {
return (
<div>
<h1> </h1>
<h3> name :{
store.state.name }</h3>
</div>
)
}
}
この時点では倉庫からしかデータを取得できません
ステップ3:ページからイベントを開始したい場合は、倉庫のデータを変更します.
fluxからDispatcherディスパッチを引き出し、データを変更するディスパッチタスクを登録します.
/src/store/index.js
import { Dispatcher } from 'flux'
let state = {
name:'flux name',
age:18
}
let dispatcher = new Dispatcher();
dispatcher.register(action=>{
switch(action.type){
case "changeName":
state.name = action.params
break;
default:
break;
}
})
export default { state,dispatcher }
Actionは形参ですtypeは、どのようなデータ操作を実行するかを判断するためのカスタム属性です.
action.paramsは、データを受信するためのカスタム属性です.
ページコンポーネントでdispatcherを使用して、データを変更するための特定のタスクを配布できます.
import React, {
Component } from 'react'
import store from '../store'
import User from './User'
export default class Setting extends Component {
setName(){
// ,
store.dispatcher.dispatch({
type:'changeName',
params:'hello,flux'
})
}
render() {
return (
<div>
<h1> </h1>
<h3> name :{
store.state.name }</h3>
<button onClick={
()=>this.setName() }> </button>
<User />
</div>
)
}
}
この場合、倉庫のデータは変更されますが、ページには変更されません.
倉庫内のデータが変化すると、ページが再レンダリングされます.
/src/store/index.jsイベントリスナーの導入
//
import {
Dispatcher } from 'flux'
// ( , )
import EventEmitter from 'events'
class State extends EventEmitter{
name = 'flux name'
age = 18
}
let state = new State();
//
const dispatcher = new Dispatcher();
//
dispatcher.register(action=>{
//
switch(action.type){
case 'changeName':
state.name = action.params;
break;
case 'changeAge':
state.age = action.params;
break;
default:
break;
}
//
state.emit('change')
})
export default {
state,dispatcher }
ページコンポーネントのマウント完了フック関数で、ウェアハウス内のデータの変化を監視するために使用されます.
import React, {
Component } from 'react'
import store from '../store'
import User from './User'
export default class Setting extends Component {
setName(){
// ,
store.dispatcher.dispatch({
type:'changeName',
params:'hello,flux'
})
}
componentDidMount(){
//
// ,
store.state.on('change',()=>{
this.setState({
})
})
}
render() {
return (
<div>
<h1> </h1>
<h3> name :{
store.state.name }</h3>
<button onClick={
()=>this.setName() }> </button>
<User />
</div>
)
}
}
2.redux
Reduxは、2015年にDan Abramovによって作成された科学技術用語です.2014年のFacebookのFluxアーキテクチャと関数式プログラミング言語Elmに啓発されました.すぐに、Reduxはその簡単で学びやすい体積が小さいため、短時間で最も人気のあるフロントエンドアーキテクチャとなっています.
Reduxは主にアプリケーション状態の管理として用いられる.簡単に言えば、Reduxはアプリケーション全体の状態を個別の定数状態ツリー(オブジェクト)で保存し、このオブジェクトを直接変更することはできません.いくつかのデータが変化すると、新しいオブジェクトが作成されます(actionsとreducersを使用します).
reduxコアコンセプト:
actions
store
reducers
reduxの3つの原則:
単一データソース
stateは読み取り専用です
純粋な関数を使用してstateを変更する
(1)取付
npm i redux
(2)基本文法
プロセス:
CreateStoreの導入
初期状態の定義
純関数の定義
倉庫の定義
サンプルコード:
①createStoreの導入
/src/store/index.js
import { createStore } from 'redux'
②初期状態の定義
const initalState = {
name:' ',
age:18
}
③純関数の定義
state前回の変更が完了した状態
Actionはコンポーネントdipatchの動作です
reducerは必ず新しいstateを返さなければなりません.そうしないとstateの変化は検出されません.
function reducer( state = initalState,action ){
switch(action.type){
case 'changeName':
return{
...state,
name:action.params
}
case 'changeAge':
return{
...state,
age:action.params
}
default:
return state;//
}
}
④倉庫の作成
const store = createStore(reducer);
export default store;
⑤ページコンポーネント使用状態
倉庫に入れる
import store from './store'
ウェアハウス内のデータの使用
name :{ store.getState().name }
⑥状態を変える
changeName(){
store.dispatch({
type:'changeName',
params:' '
});
}
⑦サブスクライバによるデータ変更ページの変更
componentDidMount(){
// , ,
store.subscribe(()=>{
this.setState({
})
})
}