摘要:整個(gè)應(yīng)用的,由多個(gè)小的的以為合成該當(dāng)前的狀態(tài)。執(zhí)行異步函數(shù)發(fā)出一個(gè),類似于取的值通過函數(shù)將需要用到的數(shù)據(jù)合并到中,再在組件中取修改的值通過被的會(huì)自動(dòng)在中擁有方法請(qǐng)求統(tǒng)一講用到所有的接口放到中方便管理函數(shù)柯里化
項(xiàng)目地址:dva-demo
隨手一個(gè)小star給予動(dòng)力,謝謝!
Build Setup# install dependencies npm install # serve with hot reload at localhost:8000 npm start # build for production with minification npm run build技術(shù)選型
插件使用基礎(chǔ)框架:react
UI庫:antd-mobile
腳手架:dva
vs-code 推薦插件polished (css-in-js css modules)
react-loadable (可用于骨架屏loading)
vs-code 配置修改auto close tag (自動(dòng)閉合html標(biāo)簽)
auto rename tag (自動(dòng)修改html標(biāo)簽名)
Bracket Pair Colorizer 2 (代碼括號(hào)嵌套顏色區(qū)分)
"emmet.includeLanguages": { "javascript": "javascriptreact" }, "emmet.triggerExpansionOnTab": true創(chuàng)建組件的幾種方式
function HelloComponent (props) { returnhello {props.name}}
無狀態(tài),純展示組件,不涉及到state狀態(tài)的操作;
組件不會(huì)被實(shí)例化,整體渲染性能得到提升;
組件不能訪問this對(duì)象,若要訪問不能通過這種方式創(chuàng)建;
組件無法訪問生命周期的方法;
無狀態(tài)組件只能訪問輸入的props,同樣的props會(huì)得到同樣的渲染結(jié)果,不會(huì)有副作用??;
tips: 只要有可能,盡量使用無狀態(tài)組件
var input = React.createClass({ propTypes: { // 定義傳入props中的屬性各種類型 initialValue: React.propTypes.string }, defaultProps: { // 組件默認(rèn)props對(duì)象 initialValue: "" }, getInitialState: function () { return { text: this.props.initialValue || "placeholder" } }, handleChange: function (event) { this.setState({ text: event.target.value }) }, render: function () { return (Type something:) } })
要被實(shí)例化,擁有生命周期
有狀態(tài)的
缺點(diǎn):
React.createClass會(huì)自綁定函數(shù)方法(不像React.Component只綁定需要關(guān)心的函數(shù))導(dǎo)致不必要的性能開銷,增加代碼過時(shí)的可能性。
React.createClass的mixins不夠自然、直觀;React.Component形式非常適合高階組件(Higher Order Components--HOC),它以更直觀的形式展示了比mixins更強(qiáng)大的功能,并且HOC是純凈的JavaScript,不用擔(dān)心他們會(huì)被廢棄
class input extends React.Component{ constructor (props) { super(props); this.state = { text: props.initialValue || "placeholder" } // ES6類中函數(shù)必須手動(dòng)綁定 this.handleChange = this.handleChange.bind(this) } handleChange(event) { this.setState({ text: event.target.value }) } render () { return (Type something:) } } input.propTypes = { initialValue: React.PropTypes.string } input.defaultProps = { initialValue: "" }
區(qū)別:
函數(shù)this綁定:
createClass中this自動(dòng)綁定,
component中不會(huì)自動(dòng)綁定:三種方式綁定
// 方式一:構(gòu)造函數(shù)中綁定this consutructor (props) { super(props); this.handleClick = this.handleClick.bind(this) } // 方式二: 使用bind綁定 // 方式三: 使用arrow function綁定路由跳轉(zhuǎn){this.handleClick()}}>
/* * 跳轉(zhuǎn) **/ // 方式1: 標(biāo)簽跳轉(zhuǎn) import { Link } from "dva/router" // 方式2: props.history (不推薦) props.history.push("/result") // 方式3: routerRedux props.dispatch( routerRedux.push( pathname: "/result", search: "?a=1&b=2", state: { id: 32 } ) ) /* * 參數(shù)接收 **/ 1. modal/app.js/subscriptions/setup 相當(dāng)于路由守衛(wèi),中間件 2. 每個(gè)組件中props中l(wèi)ocationDva Model 數(shù)據(jù)流:
namespace: 當(dāng)前 Model 的名稱。整個(gè)應(yīng)用的 State,由多個(gè)小的 Model 的 State 以 namespace 為 key 合成
state: 該 Model 當(dāng)前的狀態(tài)。數(shù)據(jù)保存在這里,直接決定了視圖層的輸出
reducers: Action 處理器,處理同步動(dòng)作,用來算出最新的 State
effects:Action 處理器,處理異步動(dòng)作
subscriptions: 訂閱,相當(dāng)于監(jiān)聽
dva 提供多個(gè) effect 函數(shù)內(nèi)部的處理函數(shù),比較常用的是 call 和 put。
call:執(zhí)行異步函數(shù)
put:發(fā)出一個(gè) Action,類似于 dispatch
通過connect mapStateToProps函數(shù)將需要用到的數(shù)據(jù)合并到props中,再在組件中取
通過dispath (被 connect 的 Component 會(huì)自動(dòng)在 props 中擁有 dispatch 方法)
// model { namespace: "app", reducers: { updateState (state, { payload}) { return {...state, ...payload} } } } // components event props.dispatch({ type: "app/updateState", payload: { locale: "fr" } })http請(qǐng)求
統(tǒng)一講用到所有的接口放到src/services/service.js中(方便管理/函數(shù)柯里化)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/99673.html
摘要:調(diào)用通過注冊(cè)表調(diào)用到實(shí)例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對(duì)于一項(xiàng)技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點(diǎn)不重要,重要的是底層的思維,解決問題和優(yōu)化...
摘要:調(diào)用通過注冊(cè)表調(diào)用到實(shí)例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對(duì)于一項(xiàng)技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點(diǎn)不重要,重要的是底層的思維,解決問題和優(yōu)化...
摘要:調(diào)用通過注冊(cè)表調(diào)用到實(shí)例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對(duì)于一項(xiàng)技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點(diǎn)不重要,重要的是底層的思維,解決問題和優(yōu)化...
閱讀 1135·2023-04-26 00:12
閱讀 3275·2021-11-17 09:33
閱讀 1069·2021-09-04 16:45
閱讀 1196·2021-09-02 15:40
閱讀 2181·2019-08-30 15:56
閱讀 2969·2019-08-30 15:53
閱讀 3557·2019-08-30 11:23
閱讀 1939·2019-08-29 13:54