• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Taro集成Redux快速上手的方法示例

    來源:懂視網 責編:小采 時間:2020-11-27 22:12:40
    文檔

    Taro集成Redux快速上手的方法示例

    Taro集成Redux快速上手的方法示例:前言的前言 最近被一款來自京東凹凸實驗室的多終端開發框架Taro吸粉了,官方對 Taro 的簡介是使用React語法,一鍵生成多終端應用(包括小程序 / H5 / 快應用 / RN 等),而目前 Github 的 Star 也達到了非常可觀的數量:4k+。對此,筆者也嘗了把鮮,體驗了
    推薦度:
    導讀Taro集成Redux快速上手的方法示例:前言的前言 最近被一款來自京東凹凸實驗室的多終端開發框架Taro吸粉了,官方對 Taro 的簡介是使用React語法,一鍵生成多終端應用(包括小程序 / H5 / 快應用 / RN 等),而目前 Github 的 Star 也達到了非常可觀的數量:4k+。對此,筆者也嘗了把鮮,體驗了

    前言的前言

    最近被一款來自京東凹凸實驗室的多終端開發框架Taro吸粉了,官方對 Taro 的簡介是使用React語法,一鍵生成多終端應用(包括小程序 / H5 / 快應用 / RN 等),而目前 Github 的 Star 也達到了非常可觀的數量:4k+。對此,筆者也嘗了把鮮,體驗了下如何使用Taro寫微信小程序。感覺還是十分靈活易用(一氣呵成,都沒遇到bug!),并且 Taro 還集成了 Redux,解決了小程序沒有數據流框架的痛點。

    這里貼一個 Taro 的官方文檔,有興趣的同行們可以了解下~也可以和我交流~嘿嘿

    前言

    Redux是JavaScript 狀態容器,提供可預測化的狀態管理。一般來說,規模比較大的小程序,頁面狀態,數據緩存,需要管理的東西太多,這時候引入Redux可以方便的管理這些狀態,同一數據,一次請求,應用全局共享。

    而Taro也非常友好地為開發者提供了移植的Redux。

    依賴

    為了更方便地使用Redux,Taro提供了與react-redux API 幾乎一致的包 @tarojs/redux 來讓開發人員獲得更加良好的開發體驗。

    開發前需要安裝redux@tarojs/redux以及一些需要用到的中間件

    $ yarn add redux @tarojs/redux redux-action redux-logger
    # 或者使用 npm
    $ npm install --save redux @tarojs/redux redux-action redux-logger

    示例

    下面通過實現一個Todolist快速上手Redux。

    1. 目錄結構

    首先通過目錄劃分我們的store/reducers/actions

    分別在文件夾里創建index.js,作為三個模塊的主文件。reducersactions里面的內容我們需要規劃好功能之后再來處理。

    // store/index.js
    
    import { createStore, applyMiddleware } from 'redux'
    
    // 引入需要的中間件
    import thunkMiddleware from 'redux-thunk'
    import { createLogger } from 'redux-logger'
    
    // 引入根reducers
    import rootReducer from '../reducers'
    
    const middlewares = [
     thunkMiddleware,
     createLogger()
    ]
    
    // 創建store
    export default function configStore () {
     const store = createStore(rootReducer, applyMiddleware(...middlewares))
     return store
    }
    

    2. 編寫Todos

    首先在app.js中引入一開始定義好的store,使用@tarojs/redux中提供的Provider組件將前面寫好的store接入應用中,這樣一來,被Provider包裹的頁面都能共享到應用的store

    import Taro, { Component } from '@tarojs/taro'
    import { Provider } from '@tarojs/redux'
    
    import configStore from './store'
    import Index from './pages/index'
    
    import './app.scss'
    
    const store = configStore()
    
    class App extends Component {
     ...
     render () {
     return (
     <Provider store={store}>
     <Index />
     </Provider> 
     )
     }
    }

    接下來就可以正式開始規劃Todos應用的主要功能了。

    首先我們可以新建constants文件夾來定義一系列所需的action type常量。例如Todos我們可以先新增ADDDELETE兩個action type來區分新增和刪除Todo指令。

    // src/constants/todos.js
    
    export const ADD = 'ADD'
    export const DELETE = 'DELETE'

    然后開始創建處理這兩個指令的reducer

    // src/reducers/index.js
    
    import { combineReducers } from 'redux'
    import { ADD, DELETE } from '../constants/todos'
    
    // 定義初始狀態
    const INITIAL_STATE = {
     todos: [
     {id: 0, text: '第一條todo'}
     ]
    }
    
    function todos (state = INITIAL_STATE, action) {
     // 獲取當前todos條數,用以id自增
     let todoNum = state.todos.length
     
     switch (action.type) { 
     // 根據指令處理todos
     case ADD: 
     return {
     ...state,
     todos: state.todos.concat({
     id: todoNum,
     text: action.data
     })
     }
     case DELETE:
     let newTodos = state.todos.filter(item => {
     return item.id !== action.id
     })
     
     return {
     ...state,
     todos: newTodos
     }
     default:
     return state
     }
    }
    
    export default combineReducers({
     todos
    })
    

    接著在action中定義函數對應的指令。

    // src/actions/index.js
    
    import { ADD, DELETE } from '../constants/todos'
    
    export const add = (data) => {
     return {
     data,
     type: ADD
     }
    }
    
    export const del = (id) => {
     return {
     id,
     type: DELETE
     }
    }
    

    完成上述三步之后,我們就可以在Todos應用的主頁使用相應action修改并取得新的store數據了。來看一眼Todos的index.js

    // src/pages/index/index.js
    
    import Taro, { Component } from '@tarojs/taro'
    import { View, Input, Text } from '@tarojs/components'
    import { connect } from '@tarojs/redux'
    import './index.scss'
    
    import { add, del } from '../../actions/index'
    
    class Index extends Component {
     config = {
     navigationBarTitleText: '首頁'
     }
    
     constructor () {
     super ()
    
     this.state = {
     newTodo: ''
     }
     }
    
     saveNewTodo (e) {
     let { newTodo } = this.state
     if (!e.detail.value || e.detail.value === newTodo) return
    
     this.setState({
     newTodo: e.detail.value
     })
     }
    
     addTodo () {
     let { newTodo } = this.state
     let { add } = this.props
     
     if (!newTodo) return
    
     add(newTodo)
     this.setState({
     newTodo: ''
     })
     }
    
     delTodo (id) {
     let { del } = this.props
     del(id)
     }
    
     render () {
     // 獲取未經處理的todos并展示
     let { newTodo } = this.state
     let { todos, add, del } = this.props 
    
     const todosJsx = todos.map(todo => {
     return (
     <View className='todos_item'><Text>{todo.text}</Text><View className='del' onClick={this.delTodo.bind(this, todo.id)}>-</View></View>
     )
     })
    
     return (
     <View className='index todos'>
     <View className='add_wrap'>
     <Input placeholder="填寫新的todo" onBlur={this.saveNewTodo.bind(this)} value={newTodo} />
     <View className='add' onClick={this.addTodo.bind(this)}>+</View>
     </View>
     <View>{ todosJsx }</View> 
     </View>
     )
     }
    }
    
    export default connect (({ todos }) => ({
     todos: todos.todos
    }), (dispatch) => ({
     add (data) {
     dispatch(add(data))
     },
     del (id) {
     dispatch(del(id))
     }
    }))(Index)
    

    最后來看一眼實現的效果~~

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Taro集成Redux快速上手的方法示例

    Taro集成Redux快速上手的方法示例:前言的前言 最近被一款來自京東凹凸實驗室的多終端開發框架Taro吸粉了,官方對 Taro 的簡介是使用React語法,一鍵生成多終端應用(包括小程序 / H5 / 快應用 / RN 等),而目前 Github 的 Star 也達到了非常可觀的數量:4k+。對此,筆者也嘗了把鮮,體驗了
    推薦度:
    標簽: 集成 Taro redux
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 日韩欧美精品不卡| 亚洲国产成人精品女人久久久 | 无码人妻精品一区二区蜜桃AV| 国产欧美日韩精品a在线观看 | 国语自产精品视频在线观看| 99re热视频这里只精品| 亚洲精品成人网站在线观看| 国产三级精品三级| 精品久久香蕉国产线看观看亚洲| 久久精品国产清高在天天线| 亚洲一区二区三区在线观看精品中文| 国产精品午夜一级毛片密呀| 国产精品1024香蕉在线观看| 国产成人精品久久一区二区三区av | 国产精品99久久久久久猫咪| 91精品全国免费观看青青| 无码人妻精品一区二区三| 日韩美女18网站久久精品| 精品国产不卡一区二区三区| 国产精品久久久天天影视香蕉| 国产亚洲欧洲精品| 国产精品2019| 97久久精品午夜一区二区| 国产精品国产三级国产普通话| 精品无码无人网站免费视频| 人妻精品久久无码专区精东影业| 伊人 久久 精品| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 国产成人精品高清不卡在线 | 91精品视频在线| 亚洲国产精品成| 亚洲国产精品热久久| 欧美亚洲国产精品第一页| 久久免费精品视频| 久久亚洲国产欧洲精品一| 久久久91精品国产一区二区三区 | 影院无码人妻精品一区二区| 亚洲精品高清在线| 中文字幕精品亚洲无线码一区应用| 一本一本久久a久久综合精品蜜桃| 亚洲欧美精品一区久久中文字幕|