搭建react + react-redux環(huán)境

基本的前置環(huán)境搭建

react作為全世界使用人數(shù)最多的前端框架之一初嘹,里面的設(shè)計和優(yōu)雅不言而喻柏蘑,可是對于新人前端磁椒,這種搭設(shè)還不是很友好走越,今天我們就來手動的假設(shè)一個環(huán)境吧.

其實我們react最好的就是使用我們的腳手架進行安裝慨默,雖然是寫給初學(xué)者看的文章贩耐,但是即使在工作中,我們?nèi)稳幌M蠹沂褂霉俜教峁┑哪_手架進行搭建厦取,省去我們自行配置需要踩的坑.

首先潮太,確保我們的node.js環(huán)境是正常安裝。我們在命令行使用node -v進行查看,沒有報錯的話铡买。證明我們的node環(huán)境是正常的更鲁。如果有問題請大家去node.js官方網(wǎng)站進行下載我們的node.js并進行安裝。

  1. 命令行檢測node.js 是否安裝正常
    node -v
  2. 在安裝正常后奇钞,我們通過npm安裝我們的腳手架工具
    npm install -g create-react-app
    npm install -g yarn

經(jīng)過一些列的讀條澡为,可能會比較慢一點,但是我們的正確安裝怎么都不會遲到吧景埃。除非你真的是很倒霉媒至,否則現(xiàn)在的源速度基本可以保證安裝的成功。

開始搭建react基本環(huán)境

通過這一步搭建我們基本可以完成一個可以運行的前端環(huán)境谷徙,并且在這個基礎(chǔ)上拒啰,我們可以加入react-redux和react-router的組件。
架設(shè)我們的運行環(huán)境在d:\WebstrormProjects\reactdemo下完慧,我們進入該文件目錄下谋旦。使用我們的腳手架命令創(chuàng)建工程。

  1. 在命令行執(zhí)行
    create-react-app demo02

經(jīng)過一頓猛如虎的操作骗随,相信大家已經(jīng)能看到以下的目錄:

安裝完成后的目錄文件結(jié)構(gòu)
我們只保留src下的index.js文件蛤织,src下的其他文件我們先干掉。

我們將src/index.js文件內(nèi)容改成為

import React from 'react';
import ReactDOM from 'react-dom';
import HelloReact from './Pages/HelloReact';

ReactDOM.render(<HelloReact />, document.getElementById('root'));

在src下創(chuàng)建Pages目錄鸿染,然后創(chuàng)建HelloReact.js來與我們的之前修改的index.js文件對應(yīng)指蚜,存放我們的頁面組件代碼,在react下萬物皆組件涨椒,頁面也是一樣摊鸡。

HelloReact.js 頁面內(nèi)容如下:

import React, {Component} from 'react';

class HelloReact extends Component {
    render() {
        return (
            <div>
                Hello React.
            </div>
        );
    }
}

export default HelloReact;

進過我們的調(diào)整,最終的目錄和文件結(jié)構(gòu)如下:

調(diào)整后文件目錄

我們在進入 d:\WebstrormProjects\reactdemo\demo02 運行 npm run start 查看下我們的頁面是否運行正常蚕冬。

頁面正常

這是瀏覽器彈出免猾,顯示我們輸入的頁面信息。到這里我們的React基本環(huán)境就已經(jīng)搭建完成囤热,接下來猎提,我們就要搭建我們的react-redux環(huán)境。

redux 和 react-redux包的安裝與配置

在react中我們的組件之間狀態(tài)的傳遞數(shù)據(jù)旁蔼,只能是父組件向子組件傳遞锨苏,而子組件只能接受這些信息。但是這不符合我們的實際操作邏輯棺聊,因為數(shù)據(jù)是共享的伞租,誰都能改才符合共享的原則。相關(guān)的redux概念很多限佩,我在這里就不多講葵诈。還是以搭建為主裸弦。
接著上面的例子,我們在d:\WebstrormProjects\reactdemo\demo02目錄下執(zhí)行以下命令

  1. 安裝redux和react-redux
    yarn add redux react-redux

redux安裝完成作喘,這個redux相當于我們的數(shù)據(jù)倉庫理疙,為了有這個倉庫,我們就需要在src代碼中創(chuàng)建store目錄徊都,來存放我們的相關(guān)操作文件
我們在src/store下創(chuàng)建index.js輸入以下代碼

import {createStore} from 'redux';
import reducer from './reducer'; // 相當于倉庫管理員

const store = createStore(reducer); // 創(chuàng)建倉庫放入管理員

export default store;

然后還是在src/store/下創(chuàng)建reducer.js文件輸入以下代碼

const defaultStates = {
    inputValue: '寫入任務(wù)',
    list: [
        '睜眼起床',
        '下床刷牙',
        '穿衣出門',
    ],
};

export default (previousState = defaultStates, action) => {
    return previousState;
}

到這里我們的倉庫已經(jīng)搭建完成沪斟。接下來需要我們通過react-redux與我們的Pages中的頁面結(jié)合了。
首先我們需要修改src/index.js代碼如下:

import React from 'react';
import ReactDOM from 'react-dom';
import HelloReact from './Pages/HelloReact';
import {Provider} from "react-redux"; // 引入Provider組件
import store from "./store";

// 無狀態(tài)組件
const App = () => {
    // 包裹在Provider之間的組件都可以進行對數(shù)據(jù)倉庫數(shù)據(jù)的操作
    return (
        <Provider store={store}>
            <HelloReact/>
        </Provider>
    );
};

ReactDOM.render(<App/>, document.getElementById('root'));

為了測試我們的react-redux環(huán)境是否搭建成功暇矫,我們修改src\Pages\HelloReact.js來做個todolist的例子主之。修改HelloReact.js代碼如下:

import React, {Component} from 'react';
import {connect} from "react-redux";
import store from "../store";

class HelloReact extends Component {
    constructor(props) {
        super(props);
        this.state = store.getState();
    }

    render() {
        return (
            <div>
                <div>
                    <input type="text" style={{height: '17px'}} placeholder={this.props.inputValue}
                           value={this.props.inputValue}
                           onChange={this.props.inputChange}/>

                    <button style={{verticalAlign: 'middle'}} onClick={this.props.clickBtn}>添加</button>
                </div>

                <div>
                    <ul>
                        {this.props.list.map((item, index) => {
                            return (<li key={item + index}>{item}</li>);
                        })}
                    </ul>
                </div>
            </div>
        );
    }
}

// 隱射關(guān)系把原來的state映射成組件中的props屬性
const stateToProps = (state) => {
    return {
        inputValue: state.inputValue,
        list: state.list,
    };
};

const dispatchToProps = (dispatch) => {
    return {
        inputChange(e) {
            let action = {
                type: 'inputChange',
                value: e.target.value,
            };
            dispatch(action);
        },

        clickBtn() {
            let action = {
                type: 'addItem',
            };

            dispatch(action);
        }
    };
};

export default connect(stateToProps, dispatchToProps)(HelloReact);

因為上面代碼有dispath,所以我們的src/store/reducer.js是可以接收到的李根。所以我們要修改里面的代碼來處理接收到的信息槽奕。

const defaultStates = {
    inputValue: '寫入任務(wù)',
    list: [
        '睜眼起床',
        '下床刷牙',
        '穿衣出門',
    ],
};

export default (previousState = defaultStates, action) => {

    if (action.type === 'inputChange') {
        let newState = JSON.parse(JSON.stringify(previousState));
        newState.inputValue = action.value;

        return newState;
    }

    if (action.type === 'addItem') {
        let newState = JSON.parse(JSON.stringify(previousState));
        newState.list.push(newState.inputValue);
        newState.inputValue = '';

        return newState;
    }

    return previousState;
}

到這里我們的基本假設(shè)就已經(jīng)完成了。謝謝大家觀看房轿。

本文源代碼地址:代碼傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粤攒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子囱持,更是在濱河造成了極大的恐慌夯接,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纷妆,死亡現(xiàn)場離奇詭異盔几,居然都是意外死亡,警方通過查閱死者的電腦和手機掩幢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門逊拍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人际邻,你說我怎么就攤上這事芯丧。” “怎么了世曾?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵缨恒,是天一觀的道長。 經(jīng)常有香客問我轮听,道長骗露,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任蕊程,我火速辦了婚禮,結(jié)果婚禮上驼唱,老公的妹妹穿的比我還像新娘藻茂。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布辨赐。 她就那樣靜靜地躺著优俘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掀序。 梳的紋絲不亂的頭發(fā)上帆焕,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音不恭,去河邊找鬼叶雹。 笑死,一個胖子當著我的面吹牛换吧,可吹牛的內(nèi)容都是我干的折晦。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼沾瓦,長吁一口氣:“原來是場噩夢啊……” “哼满着!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贯莺,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤风喇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缕探,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魂莫,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年撕蔼,在試婚紗的時候發(fā)現(xiàn)自己被綠了豁鲤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡鲸沮,死狀恐怖琳骡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讼溺,我是刑警寧澤楣号,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站怒坯,受9級特大地震影響炫狱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜剔猿,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一视译、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧归敬,春花似錦酷含、人聲如沸鄙早。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽限番。三九已至,卻和暖如春呀舔,著一層夾襖步出監(jiān)牢的瞬間弥虐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工媚赖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霜瘪,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓省古,卻偏偏與公主長得像粥庄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子豺妓,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容