国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

初次入坑 React

張率功 / 1122人閱讀

摘要:在列表的渲染中不推薦使用循環(huán)的下標(biāo)作為在列表的渲染中,如果對(duì)列表某條數(shù)據(jù)刪除會(huì)改變其上下的組件的改變?cè)龃蠼M件的復(fù)用性

React 有關(guān)使用包

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

react中使用路由react-router-dom

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

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

在react項(xiàng)目中還是用了懶加載react-loadable

import Loadable from "react-loadable"
const Loading = ({      //自定義公用加載時(shí)頁面
    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 組件的構(gòu)造函數(shù):接受父組件的參數(shù),初始化state,綁定函數(shù)等等的操作
2. componentWillMount 組件渲染之前,每次組件渲染都會(huì)觸發(fā)一次
3. componentDidMount 組件渲染之后,每次組件渲染都會(huì)觸發(fā)一次,子組件都掛載好,可以使用refs,可以使用異步方法,防止阻塞UI
4. componentWillReceiveProps 該函數(shù)接收到新的props才會(huì)被調(diào)用,render不會(huì)觸發(fā)該函數(shù)
5. shouldComponentUpdate 在組件接收到新的props或者state時(shí)被調(diào)用。在初始化時(shí)或者使用forceUpdate時(shí)不被調(diào)用。 
6. componentWillUpdate 該函數(shù)接收到新的props或者state與render之前才會(huì)被調(diào)用,初始化不會(huì)觸發(fā)該函數(shù)
7. componentDidUpdate 該函數(shù)在組件完成更新后立即調(diào)用。在初始化時(shí)不會(huì)被調(diào)用。
8. componentWillUnmount 該函數(shù)為組件被移除(卸載)時(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 在大型項(xiàng)目中可與 vuex 一樣實(shí)現(xiàn)模塊化管理。redux 通過自帶的函數(shù) combineReducers 對(duì)自身切割分為多個(gè)模塊。

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,使其可以被全局路由訪問

在對(duì)應(yīng)的組件中引入需用的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(前提是需訪問的組件引入對(duì)應(yīng)的redux)
ReactDOM.render(
    (
        
            
        
    ),
    document.getElementById("root")
);
react可優(yōu)化的各方面

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

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

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

增大組件的復(fù)用性

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95408.html

相關(guān)文章

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

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

    LucasTwilight 評(píng)論0 收藏0
  • react native 入坑集錦

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

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

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

    thursday 評(píng)論0 收藏0
  • Browserify簡易入坑指南

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

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

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

    Noodles 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<