国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解react-redux插件入門

2019-11-19 13:59:59
字體:
來源:轉載
供稿:網友

可先查看我的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.jsimport 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.jsimport 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.jsconst 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就可以了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝南县| 漾濞| 郓城县| 虞城县| 鹿泉市| 玛多县| 蒙自县| 于都县| 德令哈市| 兴宁市| 克山县| 达州市| 东乌| 峨山| 公安县| 宜丰县| 通化县| 故城县| 新营市| 泸水县| 诸城市| 清水县| 蓬莱市| 遵义市| 阿坝| 琼中| 鄯善县| 宣化县| 南涧| 嘉义市| 玉溪市| 昭通市| 肇东市| 阿拉善右旗| 犍为县| 三河市| 宝丰县| 云林县| 天祝| 西林县| 小金县|