使用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中进行处理后在dispathaction到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写一个网站的心得体会的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3125655.html

(0)
上一篇 2025年3月29日 19:53:28
下一篇 2025年3月12日 04:34:48

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • H5中header标签应该如何使用

    这次给大家带来h5中header标签应该如何使用,怎么使用h5中header标签?h5中header标签使用的注意事项有哪些,下面就是实战案例,一起来看一下。 标签定义文档的页眉,通常是一些引导和导航信息。它不局限于写在网页头部,也可以写在…

    编程技术 2025年3月29日
    100
  • H5的web本地存储如何使用

    这次给大家带来h5的web本地存储如何使用,怎么使用h5的web本地存储?h5的web本地存储使用的注意事项有哪些,下面就是实战案例,一起来看一下。 Web Storage是HTML5引入的一个非常重要的功能,可以在客户端本地存储数据,类似…

    编程技术 2025年3月29日
    100
  • localStorage与sessionStorage该如何使用

    这次给大家带来localstorage与sessionstorage该如何使用,怎样使用localstorage与sessionstorage?使用localstorage与sessionstorage的session有哪些,下面就是实战案…

    编程技术 2025年3月29日
    100
  • H5的地理定位怎样使用

    这次给大家带来h5的地理定位怎样使用,怎么使用h5的地理定位?h5地理定位的注意事项有哪些,下面就是实战案例,一起来看一下。 地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基…

    编程技术 2025年3月29日
    100
  • h5的组织内容如何使用

    这次给大家带来h5的组织内容如何使用,怎么使用h5的组织内容?用h5的组织内容的注意事项有哪些,下面就是实战案例,一起来看一下。 默认情况下,注意事项的格式与文档内容在浏览器窗口中显示的格式是不相关的,例如:浏览器会将连在一起的几个空白字符…

    编程技术 2025年3月29日
    100
  • 如何使用H5的dataset

    这次给大家带来如何使用h5的dataset,使用h5的dataset的注意事项有哪些,下面就是实战案例,一起来看一下。      HTML5标准允许你在普通的元素标签里,嵌入类似data-*的注意事项,来实现一些简单数据的存取。它的数量不受…

    编程技术 2025年3月29日
    100
  • 重绘与重排如何使用

    这次给大家带来重绘与重排如何使用,使用重绘与重排的注意事项有哪些,下面就是实战案例,一起来看一下。 浏览器加载页面原理 通常在文档初次加载时,浏览器引擎会解析注意事项来构建DOM树,之后根据DOM元素的几何属性构建一棵用于渲染的树。渲染树的…

    编程技术 2025年3月29日
    100
  • H5的标签使用详解

    这次给大家带来h5的标签使用详解,使用h5标签的注意事项有哪些,下面就是实战案例,一起来看一下。 不允许写结束标记的标签:area(定义图像映射中的区域)、base(为页面上的所有链接规定默认地址或默认目标)、br、col(为表格中一个或多…

    编程技术 2025年3月29日
    100
  • H5的localStorage使用总结

    这次给大家带来H5的localStorage使用总结,使用localStorage的注意事项有哪些,下面就是实战案例,一起来看一下。  一、什么是localStorage、注意事项Storage 在HTML5中,新加入了一个localSto…

    编程技术 2025年3月29日
    100
  • vue项目中如何使用ueditor

    这次给大家带来vue项目中如何使用ueditor,vue项目中使用ueditor的注意事项有哪些,下面就是实战案例,一起来看一下。 以vue-cli生成的项目为例 1.static文件夹下先放入ueditor文件 2.index.html添…

    编程技术 2025年3月29日
    100

发表回复

登录后才能评论