react-redux插件入門

可先檢察我的redux簡樸入門

react-redux簡介

react-redux是運用redux開闢react時運用的一個插件,別的插一句,redux不是react的產物,vue和angular中也可以運用redux;下面簡樸解說,怎樣運用react-redux來開闢react。

形貌

這個插件可以讓我們的redux代碼越發的簡約和雅觀。我假定你已有一個運用create-react-app建立的一個可以顯現hello world的react環境,而且已裝置來redux。
注重:如果是剛運用create-react-app建立的,須要運轉 npm run eject彈出個性化設置,如許就可以自定義設置了。

裝置

npm i react-redux --save

運用

react-redux供應了兩個主要的接口:Provider、connect,運用了這個插件,react-redux的subscribe和dispatch就可以遺忘來,它們就用不着了。

代碼構造

//index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import { reducer } from './index.redux';
import { Provider } from 'react-redux'

const store = createStore(reducer, applyMiddleware(thunk));

ReactDOM.render(
    <Provider store={store}>
        <App />
    </Provider>,
    document.getElementById('root')
);

registerServiceWorker();

Provider中運用的最外層,把store傳給它,只運用這一次。

//app.js

import React, { Component } from 'react';
import { addCreator, removeCreator, addAsync } from './index.redux';
import { connect } from 'react-redux';
class App extends Component {
  render() {
    return (
      <div className="App">
        <h1>如今有玉人{this.props.num}個。</h1>
        <button onClick={this.props.addCreator}>add</button>
        <button onClick={this.props.removeCreator}>remove</button>
        <button onClick={this.props.addAsync}>addAsync</button>
      </div >
    );
  }
}

//定義把state中哪一個屬性放到props中
 function mapStateToProps(state) {
   return { num: state }
 }
 //定義把哪些要領放到props中
 const actionCreators={ addCreator, removeCreator, addAsync };
 //connect實在就是一個高階組件,把app傳進去,返回一個新的app組件
 App = connect(mapStateToProps, actionCreators)(App);
export default App;

connect擔任從外部獵取組件須要的參數。經由過程connect定義后,放到props中的屬性和要領就可以直接經由過程this.props來獵取。

下面是reducer的定義。
//react.redux.js

const Add = 'addGirl', Remove = "removeGirl";

export function reducer(state = 0, action) {
    switch (action.type) {
        case Add:
            return state + 1;
        case Remove:
            return state - 1;
        default:
            return 10;
    }
}

export function addCreator() {
    return { type: Add };
}
export function removeCreator() {
    return { type: Remove };
}

export function addAsync() {
    return (dispatch, getState) => {
        setTimeout(function () {
            dispatch(addCreator());
        }, 1000);
    }
}

運用裝潢器的體式格局更文雅的寫Conect

起首須要裝置babel-plugin-transform-decorators-legacy,並在package.json中設置。

裝置

npm i babel-plugin-transform-decorators-legacy --save-dev 這個只是開闢運用,所以裝置到–save-dev

設置

設置babel的plugins屬性

  "babel": {
    "presets": [
      "react-app"
    ],
    "plugins": [
      ["transform-decorators-legacy"]
    ]
  }

修正本來寫法

運用@connect來從新定義,寫到class的上頭即可。
//App.js

@connect((state) => ({ num: state }),{ addCreator, removeCreator, addAsync })
class App extends Component {
.....//省略


// function mapStateToProps(state) {
//   return { num: state }
// }
// App = connect(mapStateToProps, { addCreator, removeCreator, addAsync })(App);

VS Code 裝潢器提醒“experimentalDecorators”的解決辦法

點擊Visual Studio Code左下角的設置按鈕(或許文件>首選項>設置,Windows環境),翻開用戶設置窗口,在搜刮框內輸入“experimentalDecorators”,發明居然可以找到選項,以下:

"javascript.implicitProjectConfig.experimentalDecorators": false

改成true就可以了。

    原文作者:code_sir
    原文地址: https://segmentfault.com/a/1190000014465254
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞