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

首頁 > 開發 > JS > 正文

詳解react-redux插件入門

2024-05-06 16:43:48
字體:
來源:轉載
供稿:網友

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

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


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 轮台县| 兴山县| 长沙市| 宣城市| 靖边县| 乾安县| 天祝| 浑源县| 兰西县| 长乐市| 呼玛县| 巩留县| 博罗县| 威海市| 五大连池市| 山丹县| 江北区| 大丰市| 永川市| 图木舒克市| 谢通门县| 故城县| 浦江县| 蓬安县| 三都| 高雄市| 自治县| 沙湾县| 雅江县| 蓬莱市| 鲁甸县| 互助| 恩平市| 龙游县| 炉霍县| 屏东市| 霍林郭勒市| 宣汉县| 增城市| 江阴市| 北宁市|