国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一看就懂的例子告訴你用react-redux的正確姿勢

DobbyKim / 660人閱讀

摘要:很多小白在看過很多教程之后仍然在敲代碼的時(shí)候不清楚應(yīng)該以什么樣的步驟進(jìn)行,那么這篇文章就一步一步分解整個(gè)過程,慢動作回放讓大家看的清清楚楚明明白白。另外,中視圖部分最好多帶帶出來,放在新建一個(gè)文件夾目錄下,并被名為引用,把其他邏輯部分放后者。

whay write this: 很多小白在看過很多教程之后仍然在敲代碼的時(shí)候不清楚應(yīng)該以什么樣的步驟進(jìn)行,那么這篇文章就一步一步分解整個(gè)過程,慢動作回放讓大家看的清清楚楚明明白白。

這個(gè)小Demo的功能是在input標(biāo)簽中輸入內(nèi)容,同步顯示在上方的p標(biāo)簽內(nèi),DEMO很簡單,大神們輕噴~?

項(xiàng)目代碼在這里:https://github.com/oliyg/redu...

clone: https://github.com/oliyg/redu...

廢話不多說

首先上圖:

/*
                 _________               ____________               ___________
                |         |             |            |             |           |
                | Action  |------------?| Dispatcher |------------?| callbacks |
                |_________|             |____________|             |___________|
                     ▲                                                   |
                     |                                                   |
                     |                                                   |
 _________       ____|_____                                          ____▼____
|         |?----|  Action  |                                        |         |
| Web API |     | Creators |                                        |  Store  |
|_________|----?|__________|                                        |_________|
                     ▲                                                   |
                     |                                                   |
                 ____|________           ____________                ____▼____
                |   User       |         |   React   |              | Change  |
                | interactions |?--------|   Views   |?-------------| events  |
                |______________|         |___________|              |_________|
*/

圖片來源:[redux-tutorial](https://github.com/happypoulp/redux-tutorial/blob/master/00_introduction.js)

上圖是大家再熟悉不過的redux數(shù)據(jù)流,從這個(gè)圖中我們可以按照下面這個(gè)流程來敲代碼:

component(渲染UI) -> action(定義用戶操作動作) -> reducer(處理action動作) -> store(處理reducer綁定state和dispatch) -> component(用connect綁定component、用Provider重新渲染UI) -> ...

這里使用了create-react-app安裝并start后把一些沒用的文件清理掉,增加我們自己的文件

文件目錄如下:

src
    component/
        Texture.js
    action/
        action.js
    reducer/
        reducer.js
    store/
        store.js
    App.js
    

好,目錄文件大概就是這樣子,正式開始敲代碼

我的位置:component/Texture.js

首先從component開刀(View視圖):

引入必要的依賴:

import React from "react";

創(chuàng)建component(這里省去了propsTypes和defaultProps,僅僅為了方便展示):

const Texture = (props) => (
  

{props.str}

);

我的位置action/action.js

然后定義action,在這個(gè)例子中,我們只有一個(gè)動作,修改input值:onChange,在action中命名為onChangeAction,并傳入一個(gè)參數(shù)e,返回包含type和value值的對象,最后暴露模塊:

const onChangeAction = (e) => (
  {
    type: "INPUTCHANGE",
    value: e.target.value
  }
);

export default onChangeAction;

我的位置reducer/reducer.js

定義完action之后,我們自然是想辦法處理這個(gè)action,那么下一步就是創(chuàng)建reducer:

reducer接收兩個(gè)參數(shù),并返回新的state,第一個(gè)參數(shù)state要先設(shè)置初始值,否則返回undefined,第二個(gè)參數(shù)action,接收可能接收到的action參數(shù)。

state中設(shè)置我們在component中要用到并綁定在視圖中顯示的props值,就是此前定義的str和placeholder

在reducer內(nèi)部,需要用到switch檢測action的type并根據(jù)不同的type來處理相應(yīng)的action

需要注意的是,我們必須要記得在default情況下返回state,否則若無匹配的action.type,state就會丟失。

const reducer = (state = { str: "??write something: ", placeholder: "here?" }, action) => {
  switch (action.type) {
    case "INPUTCHANGE":
      return {
        str: action.value
      };
    default:
      return state;
  }
};

export default reducer;

我的位置:store/store.js

我們知道reducer存在于store內(nèi),既然action和reducer都配置好了,接下來就輪到store了

引入redux中createStore模塊和之前定義好的reducer,創(chuàng)建store:

import { createStore } from "redux";
import reducer from "../reducer/reducer";
const store = createStore(reducer);

export default store;

我的位置:component/Texture.js

處理完成后我們再回到component中:

這么一來,我們只需要將store中的state和dispatch分別綁定在component中即可打通store中的state和component中的props的聯(lián)系了,那么我們只需要react-redux提供的connect和Provider即可:

導(dǎo)入相關(guān)模塊:

import { Provider, connect } from "react-redux";
import store from "../store/store";
import onChangeAction from "../action/action";

創(chuàng)建mapStateToProps和mapDispatchToProps兩個(gè)函數(shù):

const mapStateToProps = (state) => {
  return ({
    str: state.str,
    placeholder: state.placeholder
  });
};
const mapDispatchToProps = (dispatch) => {
  return ({
    onChange: (e) => { return dispatch(onChangeAction(e)) }
  });
};

并將這倆貨和store通過connect和Provider綁定到視圖中:

const TextureConnect = connect(mapStateToProps, mapDispatchToProps)(Texture);
const TextureWrapper = () => (
  
    
  
);
export default TextureWrapper;

我的位置:App.js

最后,大功告成,在App.js中引入這個(gè)組件即可。

//requirement
import React from "react";
import TextureWrapper from "./component/Texture";

const App = () => (
  
);

export default App;

另外,component/Texture.js中視圖部分最好多帶帶出來,放在新建一個(gè)文件夾view目錄下,并被名為TextureContainer.js引用,把其他邏輯部分放后者。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/83575.html

相關(guān)文章

  • 2017-06-23 前端日報(bào)

    摘要:前端日報(bào)精選大前端公共知識梳理這些知識你都掌握了嗎以及在項(xiàng)目中的實(shí)踐深入貫徹閉包思想,全面理解閉包形成過程重溫核心概念和基本用法前端學(xué)習(xí)筆記自定義元素教程阮一峰的網(wǎng)絡(luò)日志中文譯回調(diào)是什么鬼掘金譯年,一個(gè)開發(fā)者的好習(xí)慣知乎專 2017-06-23 前端日報(bào) 精選 大前端公共知識梳理:這些知識你都掌握了嗎?Immutable.js 以及在 react+redux 項(xiàng)目中的實(shí)踐深入貫徹閉包思...

    Vixb 評論0 收藏0
  • 一看Java線程池分析詳解

    摘要:任務(wù)性質(zhì)不同的任務(wù)可以用不同規(guī)模的線程池分開處理。線程池在運(yùn)行過程中已完成的任務(wù)數(shù)量。如等于線程池的最大大小,則表示線程池曾經(jīng)滿了。線程池的線程數(shù)量。獲取活動的線程數(shù)。通過擴(kuò)展線程池進(jìn)行監(jiān)控。框架包括線程池,,,,,,等。 Java線程池 [toc] 什么是線程池 線程池就是有N個(gè)子線程共同在運(yùn)行的線程組合。 舉個(gè)容易理解的例子:有個(gè)線程組合(即線程池,咱可以比喻為一個(gè)公司),里面有3...

    Yangder 評論0 收藏0
  • 一看JS抽象語法樹

    摘要:前言是現(xiàn)在幾乎每個(gè)項(xiàng)目中必備的一個(gè)東西,但是其工作原理避不開對的解析在生成的過程,有引擎,早期了項(xiàng)目,了解這個(gè)之前我們先來看看這種引擎解析出來是什么東西。 前言 babel是現(xiàn)在幾乎每個(gè)項(xiàng)目中必備的一個(gè)東西,但是其工作原理避不開對js的解析在生成的過程,babel有引擎babylon,早期fork了項(xiàng)目acron,了解這個(gè)之前我們先來看看這種引擎解析出來是什么東西。不光是babel還有...

    HackerShell 評論0 收藏0
  • 一看javascript全等于與等于

    Javascript只有六個(gè)假值(用在條件if的判斷) showImg(https://segmentfault.com/img/bVLiHL?w=424&h=346); 全等于 類型不同,返回false類型相同,則 showImg(https://segmentfault.com/img/bVLiHS?w=476&h=341); 等于 類型相同:同上=== 類型不同:嘗試類型轉(zhuǎn)換==【不是真值和...

    Apollo 評論0 收藏0
  • 一看module.exports/exports與module.export/export d

    摘要:命令規(guī)定的是對外的接口,必須與模塊內(nèi)部的變量建立一一對應(yīng)關(guān)系。意思是導(dǎo)出的不是一個(gè)具體的數(shù)值,而是一個(gè)對象命令接受一對大括號,里面指定要從其他模塊導(dǎo)入的變量名。大括號里面的變量名,必須與被導(dǎo)入模塊對外接口的名稱相同。 一、module.exports與exports nodeJS采用commonJs規(guī)范,當(dāng)前文件是一個(gè)模塊(module)私有域,通過exports屬性導(dǎo)出,通過re...

    ZoomQuiet 評論0 收藏0

發(fā)表評論

0條評論

DobbyKim

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<