成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

和我一起入坑-React-Native-加入Redux的TodoList

LucasTwilight / 1003人閱讀

摘要:之前寫了一篇沒有加入的的小博文。一拆分結(jié)構(gòu)根據(jù)自己的習(xí)慣和固定套路,拆分目錄結(jié)構(gòu)和組件結(jié)構(gòu)。把的導(dǎo)航組件集中放在純粹是個人習(xí)慣。二代碼實(shí)現(xiàn)入口文件是用來做的數(shù)據(jù)持久化。添加事項(xiàng)后要通知其他組件更新數(shù)據(jù)。

讀前須知

這個項(xiàng)目是第一次使用Redux的實(shí)例,并不具有專業(yè)性的理論知識。純粹分享一次開發(fā)過程與心得。之前寫了一篇沒有加入Redux的React Native ToDoList的小博文。這個項(xiàng)目也是在原來的基礎(chǔ)上進(jìn)行裝修完成的。目的是為了體驗(yàn)一下高深莫測的Redux。
總之,在各位網(wǎng)友的友情支持下,我依然沒有看懂redux數(shù)據(jù)流的走向,勉勉強(qiáng)強(qiáng)通了一點(diǎn)。

(一)拆分結(jié)構(gòu)

根據(jù)自己的習(xí)慣和固定套路,拆分目錄結(jié)構(gòu)和組件結(jié)構(gòu)。

├── public
├── todos-redux 
│?? ├── actions                             
│?? │?? └── index.js             
│?? ├── components
│?? │?? ├── todoItem.js
│?? │?? └── todoList.js
│?? ├── containers
│?? │?? ├── add.js
│?? │?? ├── all.js
│?? │?? ├── completed.js
│?? │?? └── incomplete.js
│?? ├── reducers
│?? │?? ├── index.js
│?? │?? └── todos.js
│?? ├── store                             
│?? │?? └── configureStore.js 
│?? ├── utils                             
│?? │?? └── utils.js 
│?? ├── index.js
│?? ├── router.js

把react-navigation的導(dǎo)航組件集中放在router.js純粹是個人習(xí)慣。
components中的組件是展示組件,不直接使用Redux。而containers中的是直接使用 Redux的組件。在這里可以看成components是containers的子組件。

(二)代碼實(shí)現(xiàn) 入口文件

redux-persist是用來做redux的數(shù)據(jù)持久化。使用方法直接參考在GitHub上的基本示例。這里的代碼基本上都是固定套路。

// index.js
import React, {Component} from "react"
import { Provider } from "react-redux"
import { TodosReduxStack } from "./router"

import { PersistGate } from "redux-persist/integration/react"
import configureStore from "./store/configureStore"
const { persistor, store } = configureStore()
export default class TodolistRedux extends Component {
  render(){
    return (
      
        
          
          
      
    )
  }
}
創(chuàng)建Action
// action/index.js
import Utils from "../utils/utils"

export const addTodo = (text) => {
  return {
    type: "ADD_TODO",
    id: Utils.uniqueId(),
    content: text
  }
}

export const toggleTodo = (id) => {
  return{
    type:"TOGGLE_TODO",
    id
  }
}
Reducers
// reducers/todos.js
var initState = [];
const todos = (state = initState, action)=>{
  switch(action.type){
    case "ADD_TODO":
      return[
        ...state,
        {
          id: action.id,
          content: action.content,
          completed: false
        }
      ]
    case "TOGGLE_TODO":
      return state.map((t) => {
         if (t.id !== action.id) {
          return t
         } 
         return Object.assign({},t,{completed:!t.completed})
        })
      
    default:
      return state
  }
}

export default todos
容器組件

connect()() 這個寫法叫函數(shù)的柯里化,漲知識啦。

// containers/all.js
const mapStateToprops = (state) => {
  return {
    todos: state.todos
  }
}

const mapDispatchToProps = (dispatch) =>{
  return {
    onTodoClick: (id) => {
      dispatch(toggleTodo(id))
    }
  }
}

export default connect(mapStateToprops, mapDispatchToProps)(AllScreen)

使用filter函數(shù)過濾數(shù)組,返回指定的值,這個地方有點(diǎn)雞肋哈,但是我不會其他的寫法了。

// containers/completed.js
const mapStateToprops = (state) => {
  return {
    todos: state.todos.filter(t => t.completed)
  }
}
(三)使用Redux前后對比

沒有使用Redux之前,項(xiàng)目使用了React Native內(nèi)置的DeviceEventEmitter方法。添加事項(xiàng)后要通知其他組件更新數(shù)據(jù)。還大量使用了AsyncStorage做數(shù)據(jù)的持久化,每一次的數(shù)據(jù)更新都需要用到它。如果是在稍復(fù)雜的項(xiàng)目中這樣寫,會死翹翹的!使用Redux 和 redux-persist 可以輕松實(shí)現(xiàn)這個功能,效果是明顯的。在已完成頁面將事項(xiàng)切換為未完成,該事項(xiàng)會直接消失,跑到未完成頁面中,這個地方并不需要做額外的處理。

說在后面的話

這種連個圖都沒有也沒有深入講解redux的文字都敢發(fā)出來,真的是表臉 (手動滑稽)。
完整的項(xiàng)目在這里GitHub Todos Redux。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97908.html

相關(guān)文章

  • 實(shí)例講解react+react-router+redux

    摘要:而函數(shù)式編程就不一樣了,這是模仿我們?nèi)祟惖乃季S方式發(fā)明出來的。數(shù)據(jù)流在中,數(shù)據(jù)的流動是單向的,即從父節(jié)點(diǎn)傳遞到子節(jié)點(diǎn)。數(shù)據(jù)流嚴(yán)格的單向數(shù)據(jù)流是架構(gòu)的設(shè)計核心。 前言 總括: 本文采用react+redux+react-router+less+es6+webpack,以實(shí)現(xiàn)一個簡易備忘錄(todolist)為例盡可能全面的講述使用react全家桶實(shí)現(xiàn)一個完整應(yīng)用的過程。 代碼地址:Re...

    RiverLi 評論0 收藏0
  • dva框架使用詳解及Demo教程

    摘要:框架的使用詳解及教程在前段時間,我們也學(xué)習(xí)講解過框架的基本使用,但是有很多同學(xué)在交流群里給我的反饋信息說,框架理解上有難度,看了之后還是一臉懵逼不知道如何下手,很多同學(xué)就轉(zhuǎn)向選擇使用框架。 dva框架的使用詳解及Demo教程 在前段時間,我們也學(xué)習(xí)講解過Redux框架的基本使用,但是有很多同學(xué)在交流群里給我的反饋信息說,redux框架理解上有難度,看了之后還是一臉懵逼不知道如何下手,很...

    bergwhite 評論0 收藏0
  • Redux來進(jìn)行組件間通訊

    摘要:用來進(jìn)行組件間通訊地址疑惑之前在做項(xiàng)目的時候,一直會遇到一個困擾我的問題,兩個互相獨(dú)立的子組件如何通訊假設(shè)現(xiàn)在結(jié)構(gòu)如下是一個組件,里面有一個刪除操作,點(diǎn)擊添加備注時會彈出模態(tài)框,讓用戶進(jìn)行填寫。 用Redux來進(jìn)行組件間通訊 demo地址 疑惑 之前在做項(xiàng)目的時候,一直會遇到一個困擾我的問題,兩個互相獨(dú)立的子組件如何通訊? 假設(shè)現(xiàn)在結(jié)構(gòu)如下 showImg(https://segmen...

    lemanli 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<