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 <ul> <li v-for="(item,index) in list" :key="index" v-if="showItem(item)"> <span v-text="item.label"></span> </li> </ul> // vue的methods属性 methods:{ showItem(item){ return item.label.indexOf('abc') !== -1 } } // jsx <ul> {list.map((item,index) => { return item.label.indexOf('abc') !== -1 && ( <li key={index}> <span>{item.label}</span> </li> ) })} </ul> 你会发现,在一些比较简单渲染需求时,使用vue的template会比较简单直接,而且很易懂.但是如果涉及一些比较复杂的逻辑处理渲染,jsx更直观,因为jsx的语法跟js的差异不大,相当于用js来描述需要如何渲染dom结构.当然jsx并不是说可以完成使用js的语法来写dom, redux在写redux的时候,不是很习惯。后来慢慢的去适应。由于还用到了 'action type'定义的不同类型。
第一种情况:触发 // action {type:'do/update-some-data',payload} 第二种情况,触发的 // 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.还是从组件开始
1.注释的问题我个人一直都重视的,一份好的注释可以让别人在开始看代码之前就能对内容有一个大概清晰的了解。 /** * @name:组件名称 * @author:谁维护的 * @version:2017-12-28 日期或者版本号 * @description:描述 * 你会发现没有’param‘,这个部分在组件定义的地方会提到。 */ 这些只是基本的信息,还可以添加其他你想加的内容。 2.模块引入的部分一般有这些分类
3.内部方法 内部方法一般是针对该组件需要的功能而定义的,而且不想跟类一起export出去。比如,组件里拿到后台的一个对象数组,需要根据这个数组的信息计算出一个值,然后在组件中使用。 4.组件定义 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.props const {c,d} = this.state const e = false return( <div> <div a={a} b={b}></div> <div {...{a,c}}></div> <div {...this.props} {...this.state}></div> e && {<div>some code</div>} </div> ) } } 首先,为啥子要写
类的方法。这里使用了 render部分。我一般习惯将使用到的 redux seletct & export 说到 // react import React,{ Component } from 'react' import { connect } from 'react-redux' import * as actions from '../actions' import { bindActionCreators } from 'redux' class MyComponent extends Component{} function mapStateToProps(state){ return { ...state,stateOne:state=>state.stateOne,stateTwo:state=>state.stateTwo } } functino mapDispatchToProps(dispatch){ return { ...bindActionCreators(actions,dispatch),handleOne:(arg)=>dispatch(actions.handleOne(arg)),handleTwo:(arg)=>dispatch(actions.handleTwo(arg)) } } export connect(mapStateToProps,mapDispatchToProps)(MyComponent) react里面要使用 // vue import { 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的 待续... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |