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

資訊專欄INFORMATION COLUMN

初次入坑 React

張率功 / 1131人閱讀

摘要:在列表的渲染中不推薦使用循環(huán)的下標作為在列表的渲染中,如果對列表某條數(shù)據(jù)刪除會改變其上下的組件的改變增大組件的復用性

React 有關使用包

使用官方提供的react腳手架搭建的小型項目:create-react-app

react中使用路由react-router-dom

單向數(shù)據(jù)流使用的是redux,通過redux-thunk中間件實現(xiàn)異步操作

使用單向數(shù)據(jù)流與路由中,通過props逐級傳遞有點麻煩,性能不佳,使用中間件形式的react-redux構造裝飾器,可以訪問全局數(shù)據(jù)流

在react項目中還是用了懶加載react-loadable

import Loadable from "react-loadable"
const Loading = ({      //自定義公用加載時頁面
    pastDelay,
    timedOut,
    error
}) => {
    if(pastDelay) {
        return 
; } else if(timedOut) { return
Taking a long time...
; } else if(error) { return
Error!
; } return null; } //路由中頁面 懶加載 view const MusicIndex = Loadable({ loader: () => import("./component/MusicIndex/MusicIndex"), loading: Loading, timeout: 10000 })

react中的生命周期
# react 的基本組件生命周期如下
1. constructor 組件的構造函數(shù):接受父組件的參數(shù),初始化state,綁定函數(shù)等等的操作
2. componentWillMount 組件渲染之前,每次組件渲染都會觸發(fā)一次
3. componentDidMount 組件渲染之后,每次組件渲染都會觸發(fā)一次,子組件都掛載好,可以使用refs,可以使用異步方法,防止阻塞UI
4. componentWillReceiveProps 該函數(shù)接收到新的props才會被調(diào)用,render不會觸發(fā)該函數(shù)
5. shouldComponentUpdate 在組件接收到新的props或者state時被調(diào)用。在初始化時或者使用forceUpdate時不被調(diào)用。 
6. componentWillUpdate 該函數(shù)接收到新的props或者state與render之前才會被調(diào)用,初始化不會觸發(fā)該函數(shù)
7. componentDidUpdate 該函數(shù)在組件完成更新后立即調(diào)用。在初始化時不會被調(diào)用。
8. componentWillUnmount 該函數(shù)為組件被移除(卸載)時被調(diào)用
class App extends Component {
    constructor(props) {
        super(props)
    }
    componentWillMount(){}
    componentDidMount() {}
    componentWillReceiveProps(newProps) {}
    shouldComponentUpdate(newProps, newState) {
        return true;
    }
    componentWillUpdate(nextProps, nextState) {}
    componentDidUpdate(prevProps, prevState) {}
    componentWillUnmount() {}
    render() {
        return(
            
展示APP頁面
); } }
react中使用路由
import { HashRouter as Router, Route, Link } from "react-router-dom"
import { MusicIndex } from "./../MusicIndex.js"
import { MusicRanking } from "./../MusicRanking.js"
import { MusicCollection } from "./../MusicCollection.js"
import { MusicPersonal } from "./../MusicPersonal.js"

render() {
    return(
        
頁面一 頁面二 頁面三 頁面四
); }
react中使用單向數(shù)據(jù)流redux
redux

redux分為3各部分

store :數(shù)據(jù),store全局僅有唯一的store

action: 操作,通過觸發(fā)action改變store的狀態(tài),stroe的狀態(tài)不能不能直接修改

Reducers 執(zhí)行,通過action反饋的操作去執(zhí)行,直接修改store的狀態(tài)

redux 在大型項目中可與 vuex 一樣實現(xiàn)模塊化管理。redux 通過自帶的函數(shù) combineReducers 對自身切割分為多個模塊。

redux例子
1. redux分割例子
import { combineReducers } from "redux"
import { albumItem } from "./reducers/MusicAlbumItem"
import { ranking } from "./reducers/MusicRanking"
import { user } from "./reducers/MusicUser"
import { collection } from "./reducers/MusicCollection"

export const rootReducer = combineReducers({
    player,
    ranking,
    user,
    collection
})

2. 多帶帶分割出來redux的例子
const R_CHANGE = "改變緩存排行版"
const R_INIT = "重置排行版"
const R_LOADING = "排行版列表加在完畢"
//以下為store
let rankingStore = {
    rank:[],
    target:{
        id:0,
        playlist:{}
    },
    loading:true
}
//以下為reducers
export const ranking = (state = rankingStore, action) => {
    switch(action.type) {
        case R_INIT:
            state.rank = action.list
            return Object.assign({}, state)
        case R_CHANGE:
            state.target = action.list
            return Object.assign({}, state)
        case R_LOADING:
            state.loading = false
            return Object.assign({}, state)
        default:
            return state
    }
}
//以下為action
export function r_change(list) {
    return {
        type: R_CHANGE,
        list:list
    }
}
export function r_init(list) {
    return {
        type: R_INIT,
        list:list
    }
}
export function r_loading() {
    return {
        type: R_LOADING
    }
}
redux如何被不同路由下的組件使用與訪問

在react的入口文件中注入store,使其可以被全局路由訪問

在對應的組件中引入需用的actino,stroe是直接訪問全局的,action是按需引入

以下為例子

import React from "react";
import ReactDOM from "react-dom"
import { createStore, applyMiddleware, compose } from "redux"
import { BrowserRouter } from "react-router-dom"
import registerServiceWorker from "./registerServiceWorker"
import "./index.css"
import App from "./App"
import { rootReducer } from "./redux/index"
import thunk from "redux-thunk"
import { Provider } from "react-redux"

const store = createStore(rootReducer, compose(
    applyMiddleware(thunk),
    window.devToolsExtension ? window.devToolsExtension() : f => f
))
//通過路由注入store,使其可被全局訪問stroe(前提是需訪問的組件引入對應的redux)
ReactDOM.render(
    (
        
            
        
    ),
    document.getElementById("root")
);
react可優(yōu)化的各方面

在react 16 之前的版本可以通過簡單的遍歷組件中的props或者state數(shù)據(jù)的變化監(jiān)聽數(shù)據(jù)是否被更新,來控制組件的渲染,一個正常的組件在父組件的狀態(tài)被改變的情況下,會觸發(fā)render,如果是列表之類的組件render多了就會性能差,可以通過 shouldComponentUpdate 鉤子函數(shù)來決定組件是否接受更新

在react 16后,官方提出類似Component的接口 PureComponent,react可以自動幫你決定組件是否接受更新

在組件的使用時,必須對其賦于 全局唯一的KEY。在列表的渲染中不推薦使用循環(huán)的下標作為 key 在列表的渲染中,如果對列表某條數(shù)據(jù)刪除會改變其上下的組件的 key 改變

增大組件的復用性

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

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

相關文章

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

    摘要:之前寫了一篇沒有加入的的小博文。一拆分結構根據(jù)自己的習慣和固定套路,拆分目錄結構和組件結構。把的導航組件集中放在純粹是個人習慣。二代碼實現(xiàn)入口文件是用來做的數(shù)據(jù)持久化。添加事項后要通知其他組件更新數(shù)據(jù)。 讀前須知 這個項目是第一次使用Redux的實例,并不具有專業(yè)性的理論知識。純粹分享一次開發(fā)過程與心得。之前寫了一篇沒有加入Redux的React Native ToDoList的小博文...

    LucasTwilight 評論0 收藏0
  • react native 入坑集錦

    摘要:使用解構方法操作一個深層的對象,再可能不會觸發(fā)以及模擬器和真機調(diào)試都正常,只有打包發(fā)布之后有這個問題。和第一個問題差不多,也是導致實體機有問題有更多坑的同學的可以一起分享交流,后續(xù)會持續(xù)更新 1. 使用解構方法操作一個深層的對象,再setState,可能不會觸發(fā)render(ios以及Android模擬器和真機調(diào)試都正常,只有打包發(fā)布之后Android有這個問題)。 ... /* Re...

    lufficc 評論0 收藏0
  • React-Native 真的是移動開發(fā)的未來嗎

    摘要:在版本上,安卓系統(tǒng)上的渲染就有鋸齒,后來我們不分效果是使用圖片實現(xiàn)的,汗啊第三方組件不全。搖一搖問題的解決在我們使用了等狀態(tài)管理時,熱更新不會更新這些代碼,而頻繁搖一搖實在是太累了。此時可以使用此時相當于虛擬了一個搖一搖事件。 公司本年度有App任務,陸陸續(xù)續(xù)用RN開發(fā)了兩個應用。一款是涉及儀器控制的平板項目,另一款是客戶端的App。下文談談使用RN開發(fā)的部分認知(其實只是隨便扯一扯,...

    thursday 評論0 收藏0
  • Browserify簡易入坑指南

    摘要:簡要說明長處在于使用模塊規(guī)范,而不是使用的模塊規(guī)范,以及使用的模塊規(guī)范。簡單使用關于命令行工具使用,請參照官方文檔。相同模塊重復依賴模塊重復依賴很容易理解,模塊實現(xiàn)時可能分割為多個子文件實現(xiàn),每個子文件內(nèi)部可能會引用同一個模塊,如。 簡介 browerify: http://browserify.org/index.html browserify可以看做瀏覽器端的又一個模塊...

    vpants 評論0 收藏0
  • React打怪升級-角色創(chuàng)建

    摘要:序年,立秋,打算入坑,知道這又是一項艱巨的任務。箭頭函數(shù)對象解構類拓展運算符升級地圖指南學習曲線較為陡峭的需要一個明確的指南,這張來自一個被了的,要好好看一看。開發(fā)簡書項目從零基礎入門到實戰(zhàn)接下來,領任務,去升級吧 序 2018年,立秋,打算入坑React,知道這又是一項艱巨的任務。在框架選擇時,確實糾結了很長時間,而為什么決定入坑React,是我看到一片文章。也決定把自己的基礎知識通...

    Noodles 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<