运用React写一个网站的心得体味-
网站最初前端运用vue
开发,在前段工夫因为项目的开发进度已经不是那么危急,有了一些余暇工夫。而对没有运用过React
又不断念兹在兹,干脆就运用React
进行了一次前端的重构。
学习一门新的技术最根本的固然就是浏览相干文档了,作为一个单页面利用前端路由固然是不成能少了,而运用React
要是不运用Reduce
那又感觉发挥不其作用(虽然他们其实也没什么必需的关系)。所以在这里运用了react
,react-router
,react-redux
,下列为在运用React
开发中的一些见闻,有幸被你看到该文,若有不合错误之处,还望指出,要是你不当心被带入坑,自己概不负责。
第一就是浏览React
的文档了,文档运用批量举例的情势介绍怎样运用React
进行开发,如怎样设计state
,props
,怎样组件间通讯,怎样设计组件等。文档虽然进行了细致的介绍,但是往往还是需要真正的实践才干发明其中的妙处。如state
,props
的设计,在一个X
组件中具有Y
,Z
两个组件,假如Y
组件具有一个输入框,而Z
组件可能需要用到Y
组件输入的值做出一定的变化,固然要是把他们写到一起也不是不成以的,但是考虑到组件复用,功能单一等因素还是拆开比拼合理,那么这个值到底应当哪个组件来贮存呢?如下两个组件离别为Y
,X
,这样设计显明是不相符state
设计的,具有太多冗余局部。
class InputComponent extends Component { constructor () { super()this.state = { value: ''} } valInput (e) { let value = e.target.valuethis.setState({value})this.props.inputChange(value) } render () {return } }
class ParentComponent extends Component { constructor () { super()this.state = { val: ''} } inputChange (val) {this.setState({val}) } render () {return ({this.state.val} ) } }
要是运用如下的写法也许看起来更好
class InputComponent extends Component { render () { let {val, inputChange} = this.props// 这里的val并不是必需的,但是当一个值来自非输入控件的时候,如可编纂的div,ace在每次施行render函数的时候都会致使本来输入的值被清空。return } }
class ParentComponent extends Component { constructor () { super()this.state = { val: ''} } inputChange (e) {this.setState({val: e.target.value}) } render () { let val = this.state.valreturn ({val} ) } }
react-router
供给了前端路由根本的需求,依据需要运用到的功能在项目文档介绍中即可寻到概括运用办法。根本的配置和其他框架也是大同小异,但是许多API的运用确有些天差地别(和vue
比拟),还是需要细心通读文档的,避免在开发中涌现题目再去解决浪费工夫,如IndexRoute
在vue
中可以在子路由通过''
这样的空字符来作为默许UI
。
function root () { this.path = '/' this.component = require('pages/index').default}function demo () { this.path = 'demo' this.getComponent = (nextstate, cb) => { require.ensure([], (require) => { cb(null, require('pages/demo').default) }) } } const createRoute = (R) => { let route = new R() route.childRoutes = route.childRoutes && route.childRoutes.map(r => createRoute(r)) return route } export default [root, demo].map((route) => createRoute(route))
react-redux
在从表象了解Redux中进行了简略介绍。Redux
的运用减少了开发中思索的工夫,同时也以免了一些可能的题目。在运用历程中也发明一些题目,运用Redux
必定致使批量的dispatch
涌现在组件中,怎样防止业务变得复杂和巨大后致使项目变得难以保护,也是值得思索的。在被改版的网站中运用页面+组件的方式开发,一个页面表示除了跟组件外的最高级组件,可具有多个组件,只要页面才干向reducer
发起action
,所有多个组件共用的数据则通过在页面中通报到子组件的props
,子组件要是需要更新数据,则通过props
属性调取父组件传入的办法向上通报下令,在页面中运用dispath
来指定action
来调取reducer
进行数据更新,固然有时候也需要在action
中进行处置后在dispath
action
到reducer
(比方网络要求)。值得注意的是每次dispath
一个action
,Redux
都会遍历所有已经注册的reducer
(reducer往往由多个子reducer组成),也就是说所有reducer
都会被调取(从项目中的体现和文档来看是这样的),一下是被改版网站运用的reducer
局部代码。
export default class ArticleReducer { [AAS.ARTICLE_REQUEST_STATE] (state, action) {return Object.assign({}, state, {loading: action.loading}) } [AAS.ARTICLE_SEARCH_STATE] (state, action) {return Object.assign({}, state, {searching: action.searching}) } }
const reducers = {} const AR = new ArticleReducer() const NR = new NewsReducer() reducers.articles = (state = initState.article, action) => { return AR[action.type] ? AR[action.type](state, action) : state } reducers.editor = (state = initState.editor, action) => { return ER[action.type] ? ER[action.type](state, action) : state }
就运用React
后的感觉,因为首先次真正运用Redux
这样的状态治理工具来进行进行开发(虽然也有运用vuex,但是都不是基于整个项目的),开发流程变得更加可控,数据流向变得清晰,而在开发中各个工具耦合性也变得更低,总的来说这是一次不错的尝试。不外个人觉得无论运用什么技术,复杂程度随着业务的添加必然变得更高,而要保持一个项目的不乱,强健,易于保护将变得更加艰难。
最后不得不感慨,良好编程习惯的重要性。
以上就是运用React写一个网站的心得体味的细致内容,更多请关注 百分百源码网 其它相干文章!