React-Reduxのチュートリアルの使用説明
21518 ワード
React-ReduxはReactエコでよく使われるコンポーネントであり、Reduxプロセスを簡素化することができます.
1.react-reudxのインストールに必要な依存
2.Reduxのインストールと使用
まずstoreフォルダを作成し、storeフォルダの下にindex.jsファイルを作成します.
その後、フォルダの下にreducer.jsファイルを作成します.
storeレベルでProviderTest.jsxファイルを作成します.これはUIコンポーネントです.stateToPropsはstateのデータをpropsに転送することに相当し、propsがこれらのデータを受け入れることができます.dispatchToPropsも同様の機能です.
bindActionCreatorを使用することもできます.その役割は、オブジェクトの値をaction creatorsから同じkeyのオブジェクトに変換することですが、変換されたオブジェクトの値は、action creatorをdispatchに包む関数です.
コンテナコンポーネントであるVisibleProviderTest.jsファイルの作成
上記のコードでは、connectメソッドはstateToPropsとdispatchToPropsの2つのパラメータを受け入れます.UIコンポーネントのビジネスロジックを定義します.前者は入力ロジックを担当し、stateをUIコンポーネントのパラメータ(props)にマッピングし、後者は出力ロジックを担当し、UIコンポーネントに対するユーザの操作をActionにマッピングする.
次のコードは、store/reducerで対応する2つのactionのデータ処理を定義し、さっき作成したreducer.jsファイルを以下のように変更します.
Providerはプロバイダで、このコンポーネントを使用すれば、コンポーネントの中の他のすべてのコンポーネントがstoreを使用することができます.これもReact-reduxのコアコンポーネントです.
App.jsを次のように変更します.
1.react-reudxのインストールに必要な依存
npm install --save react-redux
2.Reduxのインストールと使用
npm install --save redux
まずstoreフォルダを作成し、storeフォルダの下にindex.jsファイルを作成します.
import {
createStore} from 'redux'
import reducer from './reducer'
const store = createStore(reducer)
export default store
その後、フォルダの下にreducer.jsファイルを作成します.
const defalutState = {
inputValue : '',
list :[]
}
export default (state = defalutState,action) =>{
return state
}
storeレベルでProviderTest.jsxファイルを作成します.これはUIコンポーネントです.stateToPropsはstateのデータをpropsに転送することに相当し、propsがこれらのデータを受け入れることができます.dispatchToPropsも同様の機能です.
import React from 'react'
export const ProviderTest = (props) => {
let {
list ,inputValue , changeValue ,submit} = props
return (
<div>
<input value={
inputValue} onChange={
(e)=>changeValue(e)}></input>
<button onClick={
submit}></button>
<ul>
{
list.map((item, index) => {
return <li key={
index}>{
item}</li>
})
}
</ul>
</div>
)
}
export const stateToProps = (state) => {
return {
inputValue : state.inputValue,
list : state.list
}
}
export const dispatchToProps = (dispatch) => {
return {
changeValue(e) {
let action = {
type : "change_input",
value : e.target.value
}
dispatch(action)
},
submit(e) {
let action = {
type : "add_item",
}
dispatch(action)
}
}
}
bindActionCreatorを使用することもできます.その役割は、オブジェクトの値をaction creatorsから同じkeyのオブジェクトに変換することですが、変換されたオブジェクトの値は、action creatorをdispatchに包む関数です.
import React from 'react'
import {
changeCountAction , getTodoList} from '../store/actionCreators';
import {
bindActionCreators } from 'redux'
export const ReduxTestUi = (props) =>{
let {
count , actions} = props
return (
<div>
<p>{
count}</p>
<button onClick={
() =>actions.changeCountAction(1)}>+</button>
<button onClick={
actions.getTodoList}></button>
</div>
)
}
export const stateToProps = (state) => {
return {
count : state.count,
input : state.inputValue
}
}
export const dispatchToProps = (dispatch) => {
return {
actions:bindActionCreators({
changeCountAction, getTodoList},dispatch)
// changeCount(){
// let action = changeCountAction(1)
// dispatch(action)
// },
// getList(){
// let action = getTodoList()
// dispatch(action)
// }
}
}
コンテナコンポーネントであるVisibleProviderTest.jsファイルの作成
import {
connect } from "react-redux"
import {
ProviderTest,stateToProps,dispatchToProps}from "./ProviderTest"
const VisibleProviderTest = connect(stateToProps,dispatchToProps)(ProviderTest)
export default VisibleProviderTest
上記のコードでは、connectメソッドはstateToPropsとdispatchToPropsの2つのパラメータを受け入れます.UIコンポーネントのビジネスロジックを定義します.前者は入力ロジックを担当し、stateをUIコンポーネントのパラメータ(props)にマッピングし、後者は出力ロジックを担当し、UIコンポーネントに対するユーザの操作をActionにマッピングする.
次のコードは、store/reducerで対応する2つのactionのデータ処理を定義し、さっき作成したreducer.jsファイルを以下のように変更します.
const defaultState = {
inputValue : '',
list : []
}
export default (state = defaultState,action) => {
switch(action.type){
case 'change_input' : {
let newState = JSON.parse(JSON.stringify(state))
newState.inputValue = action.value
return newState
}
case 'add_item' : {
let newState = JSON.parse(JSON.stringify(state))
newState.list.push(newState.inputValue)
newState.inputValue = ''
return newState
}
default : return state
}
}
Providerはプロバイダで、このコンポーネントを使用すれば、コンポーネントの中の他のすべてのコンポーネントがstoreを使用することができます.これもReact-reduxのコアコンポーネントです.
App.jsを次のように変更します.
import {
Provider } from 'react-redux'
import React from 'react';
import ReactDOM from 'react-dom';
import VisibleProviderTest from './VisibleProviderTest'
import store from './store'
function App() {
return (
<Provider store={
store}>
<VisibleProviderTest/>
</Provider>
);
}
export default App;