react 项目总结
前言
最近在寫一個項目,在寫react的過程中遇到過很多坑,現在總結一下,為以后的項目作參考.另外借此項目來比較一下 vue.js 和 react.js 之間的一些異同.
先說說組件
剛剛開始寫組件的時候,感覺難度不大(跟vue差不多)。最有意思的應該是jsx語法,個人感覺,jsx的功能性確實比vue的template更強,而且可讀性更高.
舉個栗子 // vue <p :id="text" :class="{'active':isActive}" v-text="'hello! ' + msg"></p> // jsx <p id={text} className={isActive && 'active'}>hello !{msg}</p>你會發現,在一些比較簡單渲染需求時,使用vue的template會比較簡單直接,而且很易懂.但是如果涉及一些比較復雜的邏輯處理渲染,jsx更直觀,因為jsx的語法跟js的差異不大,相當于用js來描述需要如何渲染dom結構.當然jsx并不是說可以完成使用js的語法來寫dom,{}里面只能是一個表達式,所以像if else或者switch這種語法在{}是不能用的.
redux
在寫redux的時候,不是很習慣。后來慢慢的去適應。由于還用到了saga,以至于書寫方法上與redux官方的推薦的有所不同。
'action type'定義的不同類型。第一種情況:觸發action之后直接commit一個reducer。
// action {type:'do/update-some-data',payload}第二種情況,觸發的action會被saga攔截,然后saga完成一定的操作后(一般是從后臺獲取數據);put一個action,作用到reducer。
// saga action {type:'start/get-some-data',payload}// reducer action {type:'success/get-some-data',payload} {type:'failed/get-some-data',payload} {type:'error/get-some-data',payload}一些代碼書寫規范
因為以前在寫代碼的時候一直都沒有確定好一個規范,導致代碼風格一直有變化(已經被同事吐槽好幾次了)。后來在這個項目里面看了其他的同事的代碼再結合網上推薦的一些代碼規范,目前總結出一些小心得(也不算什么心得)。
1.還是從組件開始
這些只是基本的信息,還可以添加其他你想加的內容。
2.模塊引入的部分一般有這些分類內部方法一般是針對該組件需要的功能而定義的,而且不想跟類一起export出去。比如,組件里拿到后臺的一個對象數組,需要根據這個數組的信息計算出一個值,然后在組件中使用。
如果這個方法在多個組件中使用到的話,還可以把它提到utils文件夾中。
一般情況下,組件都會使用類來定義。比如: class MyComponent extends Component{static defaultProps = {a:0,b:1}constructor(props) {super(props)this.state = {c:2,d:3}}handleClick = () = >{// some stuff}render() {const {a,b} = this.propsconst {c,d} = this.stateconst e = falsereturn(<div><div a={a} b=></div><div {...{a,c}}></div><div {...this.props} {...this.state}></div>e && {<div>some code</div>}</div>)} }
首先,為啥子要寫defaultProps?我覺得,有兩點:
state就略過了。
類的方法。這里使用了箭頭函數來定義,主要是為了使用this,因為大多數情況下,handle里面都會調用this.setState,這樣寫就不需要去constructor一個個bind(this)了。其實如果方法里面沒有使用指向類的this,用函數定義的方式也是可以的。
render部分。我一般習慣將使用到的props和state以及其他的數據全部在return前定義出來。這樣會更清晰明白組件里面使用了哪些數據。
另外是給元素設置屬性的一些小技巧。平時最常用的方式是這樣的key={value},還可以使用對象解構的方式設置屬性。
說到redux一定要扯上vuex(看完下面的內容,如果有不同意見的戰友,請不要打我)。
這里先從組件部分來看一下redux和vuex的區別。在組件里面主要是看如何讓當前組件使用到store中的數據和方法。
react里面要使用connect方法把state和dispatcher和當前組件連接起來.
// vueimport { createNamespacedHelpers } from 'vuex' const { mapState, mapActions } = createNamespacedHelpers('theModule')export default {computed:{...mapState(['stateOne','stateTwo']),...mapState({stateThree:state=>state.theModule.stateThree,stateFour:state=>state.theModule.stateFour})},methods:{...mapActions(['handleOne','handleTwo']),...mapActions({handleThree:'actionThree',handleFour:'actionFour'})} }在vue里面也有相應的輔助函數,而且vuex的store包含來數據和方法,在根組件注入之后,所有的子組件都可以通過this.$store使用,輔助函數只是用來過濾而已.
待續...
總結
以上是生活随笔為你收集整理的react 项目总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python仿真智能驾驶_基于Pytho
- 下一篇: 阿里云 mysql 超时_mysql数据