摘要:引入數(shù)據(jù),初始化,設(shè)置同步可以獲取數(shù)據(jù),如何在獲取結(jié)束后進(jìn)行條件渲染根據(jù)條件的變化,初始化加載一種情況,數(shù)據(jù)加載完成后,改變條件,渲染另一種情況多個(gè)同級(jí)兄弟組件渲染,如果沒有父級(jí)標(biāo)簽包裹要求必須有且僅有一個(gè)節(jié)點(diǎn),如何處理不用創(chuàng)建冗余的父級(jí)標(biāo)
Issue1:
ajax引入數(shù)據(jù),初始化data==null,設(shè)置ajax同步async=false可以獲取數(shù)據(jù),如何在ajax獲取結(jié)束后render;
Response:
進(jìn)行條件渲染:根據(jù)條件(State)的變化,初始化加載一種情況,數(shù)據(jù)加載完成后,改變條件(State),渲染另一種情況;
Issue2:
多個(gè)同級(jí)兄弟組件渲染,如果沒有父級(jí)標(biāo)簽包裹(ReactJS要求必須有且僅有一個(gè)Root節(jié)點(diǎn)),如何處理?
Response
不用創(chuàng)建冗余的父級(jí)標(biāo)簽,創(chuàng)建一個(gè)函數(shù)return這些同級(jí)組件,在render()函數(shù)中返回函數(shù)返回值即可;
示例代碼:
this.state.data.loading條件判斷解決Issue1;
this.renderBody()函數(shù)解決Issue2;
constructor() { super() // data: [1,2,4,5,6,7,9] this.state = { data: { loading: true } } } componentDidMount() { setTimeout(() => { this.setState({ data: { data: [1, 2, 4, 5, 6, 7, 9] } }) }, 3000); } clickHandler() { let index = 2 , newValue = Date.now() % 9; this.setState({ data: { data: [ ...this.state.data.data.slice(0, index), newValue, ...this.state.data.data.slice(index + 1) ] } }) this.state.data.data[index] = newValue; this.forceUpdate() } renderBody() { return ({ _.map(this.state.data.data, (v, i) =>) } render() { return ({v}) }{ this.state.data.loading ?) }: this.renderBody() }
Issue3:
ES6如何實(shí)現(xiàn)按需加載?
Response
React不必需要按需加載,封裝成組件,在不需要的時(shí)候根本就不會(huì)下載該組件和該組件的依賴;
Issue4:
React實(shí)現(xiàn)服務(wù)器端渲染?需要在服務(wù)器端(nodejs)運(yùn)行js,使用renderToStaticMakeup()將組件返回字符串,前端如何獲取并轉(zhuǎn)成組件?
Response
React沒有需求實(shí)現(xiàn)服務(wù)器端渲染,如果要求SEO,則可以后臺(tái)腳本實(shí)現(xiàn)靜態(tài)化,效率等各方面比React好很多;
Issue5:
數(shù)據(jù)從父組件一層層傳下來,如何精準(zhǔn)快速的查找到哪個(gè)組件定義的state;
Response
Flux或者Redux架構(gòu);
Issue6:
生命周期的使用情況;
Response
盡可能的不要使用生命周期,唯一常用的是componentDidMount();
Issue7:
Jest測試有必要么;
Response
實(shí)現(xiàn)交互函數(shù)的測試即可,頁面顯示通過看效果即可測試;
Issue8:
this.state.property=val和setState()都可以改變state數(shù)據(jù),它們有什么區(qū)別?
Response
使用this.state.property=val改變state數(shù)據(jù),需要使用forceUpdate()強(qiáng)制渲染,渲染時(shí)會(huì)銷毀原有的State對(duì)象并創(chuàng)建新的(復(fù)制原對(duì)象并更新this.state.property的值),而不是對(duì)原有State對(duì)象的更改;
Issue9:
React初始化State對(duì)象時(shí)
this.state = { data: { data: [1, 2, 4, 5, 6, 7, 9], loading:true } }
通過:
this.setState({ data:{ loading:false } })
并不會(huì)重新渲染,ReactJS檢測this.state.data的改變,即State對(duì)象頂層屬性名的值的改變,這里改變的是this.state.data.loading的結(jié)果
Response
this.setState({ data: { data: [ ...this.state.data.data.slice(0, index), newValue, ...this.state.data.data.slice(index + 1) ] } })
通過重新組裝this.state.property對(duì)象并賦值,引發(fā)View的重新渲染;
Issue10:
React會(huì)把State狀態(tài)更新操作放在一起,批量執(zhí)行,是如何執(zhí)行的?
不同生命周期的State狀態(tài)更新是在渲染階段一起,依次執(zhí)行,還是在該生命周期方法結(jié)束后執(zhí)行,每個(gè)生命周期都是獨(dú)立的;
Response
首先,不推薦頻繁的使用生命周期函數(shù);
其次,在生命周期函數(shù)中調(diào)用this.setState()函數(shù),ReactJS會(huì)將this.setState()加入隊(duì)列中,優(yōu)先執(zhí)行完自定義的腳本后,執(zhí)行State對(duì)象的更新;每個(gè)生命周期都是獨(dú)立的;
注意:在componentWillMount()函數(shù)中調(diào)用this.setState()函數(shù)沒有意義,這時(shí)沒有進(jìn)行渲染,還沒有DOM節(jié)點(diǎn),無法進(jìn)行數(shù)據(jù)的更新——數(shù)據(jù)的更新需要在渲染完DOM后進(jìn)行;
Issue11:
react-router怎么用;
Response
引入依賴: import { Router, Route, hashHistory } from "react-router" Router的使用: render(, document.getElementById("container") ) ----------- 引入依賴: import { Link } from "react-router" Router的使用: render() { return ( Detail Detail2) } -----------
也可以在函數(shù)中使用Location.href.push("/detail")進(jìn)行跳轉(zhuǎn);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/81560.html
摘要:前言在應(yīng)用開發(fā)中,列表是我們使用頻率非常高的一種展現(xiàn)形式,在項(xiàng)目中更是如此。無處不在的使用更是需要我們小心觸發(fā)性能瓶頸的深水炸彈。不要用索引當(dāng)值要求我們對(duì)列表中的每一項(xiàng)設(shè)置一個(gè)唯一的值,這個(gè)虛擬的算法有很大關(guān)系。 前言 在應(yīng)用開發(fā)中,列表是我們使用頻率非常高的一種展現(xiàn)形式,在reactjs項(xiàng)目中更是如此。無處不在的使用更是需要我們小心觸發(fā)性能瓶頸的深水炸彈。 下面就我最近的總結(jié)出的幾點(diǎn)...
摘要:組件關(guān)注的只應(yīng)該是狀態(tài),不同的狀態(tài)呈現(xiàn)不同的表現(xiàn)形式。組件一切都是組件倡導(dǎo)開發(fā)者將切分成一個(gè)個(gè)組件從而達(dá)到松耦合及重用的目的。只不過的命名是進(jìn)入狀態(tài)之前跟進(jìn)入狀態(tài)之后。 前端已不止于前端-ReactJs初體驗(yàn) 原文寫于 2015-04-15 https://github.com/kuitos/kuitos.github.io/issues/21 要說2015年前端屆最備受矚目的技術(shù)是啥...
摘要:最近兩三周在主要在寫,在這里寫一下,算是個(gè)總結(jié)。但是打算換成,它是推薦用或,就這樣決定把之前的換成了。這里面主要的問題是作用域??傊膊]有那么難。目前看來確實(shí)是非常適合于前后端分離的。 最近兩三周在主要在寫 React,在這里寫一下,算是個(gè)總結(jié)。 webpack 我們的后端語言用的是 Go, 對(duì)于寫網(wǎng)站來說,Go 并沒有好的前端資源(js, css,image)的管理方式(打包,壓縮...
摘要:最近在學(xué)習(xí),不得不說第一次接觸組件化開發(fā)很神奇,當(dāng)然也很不習(xí)慣。 最近在學(xué)習(xí)react.js,不得不說第一次接觸組件化開發(fā)很神奇,當(dāng)然也很不習(xí)慣。react的思想還是蠻獨(dú)特的,當(dāng)然圍繞react的一系列自動(dòng)化工具也是讓我感覺亞歷山大今天總結(jié)一下react組件之間的通信,權(quán)當(dāng)是自己的學(xué)習(xí)筆記: reactJs中數(shù)據(jù)流向的的特點(diǎn)是:單項(xiàng)數(shù)據(jù)流 react組件之間的組合不知道為什么給我一種數(shù)...
摘要:目前開發(fā)的項(xiàng)目中為了仿原生效果如果自己去通過重新實(shí)現(xiàn)的話成本極大所以不得不使用來作為前端庫。可以在這個(gè)函數(shù)中清理在綁定的事件這個(gè)方式很有用。在開發(fā)過程中這些生命周期函數(shù)是我使用最頻繁最常見的操作。 ReactJS作為目前最火的構(gòu)建用戶界面的前端框架,為什么有那么多的前端工程師去追逐它,不僅因?yàn)樗唵?,而且它提供了一系列?qiáng)大的API讓我們擺脫以前繁瑣的DOM操作,使我們的邏輯更加清晰,代...
閱讀 2024·2021-11-22 15:29
閱讀 3321·2021-10-14 09:43
閱讀 1311·2021-10-08 10:22
閱讀 3400·2021-08-30 09:46
閱讀 1481·2019-08-30 15:55
閱讀 1979·2019-08-30 15:44
閱讀 909·2019-08-30 14:19
閱讀 1513·2019-08-30 13:13