React を使用して Web サイトを作成した経験

PHP中文网
リリース: 2017-06-21 15:24:41
オリジナル
3592 人が閲覧しました

この Web サイトを開発する目的は、主にいくつかのメモを記録し、いくつかの情報を集約することです。また、いくつかの技術的なアイデアを練習できる、オンラインの世界の静かな場所とみなすこともできます。

Web サイトのフロントエンドは、最初は vue を使用して開発されました。しばらく前、プロジェクトの開発の進行がそれほど緊急ではなくなったため、少し時間ができました。これまでに React を使用したことがないことにまだ不安があったので、単純に React を使用してフロントエンドを再構築しました。 vue开发,在前段时间由于项目的开发进度已经不是那么紧急,有了一些空闲时间。而对没有使用过React又一直耿耿于怀,索性就使用React进行了一次前端的重构。

学习一门新的技术最基本的当然就是阅读相关文档了,作为一个单页面应用前端路由当然是不可能少了,而使用React如果不使用Reduce那又感觉发挥不其作用(虽然他们其实也没什么必须的关系)。所以在这里使用了reactreact-routerreact-redux,以下为在使用React开发中的一些见闻,有幸被你看到该文,如有不对之处,还望指出,如果你不小心被带入坑,本人概不负责。

首先就是阅读React的文档了,文档使用大量举例的形式介绍如何使用React进行开发,如如何设计stateprops,如何组件间通信,如何设计组件等。文档虽然进行了详细的介绍,但是往往还是需要真正的实践才能发现其中的妙处。如stateprops的设计,在一个X组件中拥有YZ两个组件,假设Y组件拥有一个输入框,而Z组件可能需要用到Y组件输入的值做出一定的变化,当然如果把他们写到一起也不是不可以的,但是考虑到组件复用,功能单一等因素还是拆开比较合理,那么这个值到底应该哪个组件来储存呢?如下两个组件分别为YX,这样设计明显是不符合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 <input onChange={this.valInput.bind(this)}/>  }
}
ログイン後にコピー
class ParentComponent extends Component {
  constructor () {
    super()this.state = {
      val: ''}
  }
  inputChange (val) {this.setState({val})
  }
  render () {return (      <section>{this.state.val}<InputComponent inputChange={this.inputChange.bind(this)}/>
      </section>    )
  }
}
ログイン後にコピー

如果使用如下的写法或许看起来更好

class InputComponent extends Component {
  render () {
    let {val, inputChange} = this.props// 这里的val并不是必须的,但是当一个值来自非输入控件的时候,如可编辑的div,ace在每次执行render函数的时候都会导致原来输入的值被清空。return <input value={val} onChange={inputChange}/>  }
}
ログイン後にコピー
class ParentComponent extends Component {
  constructor () {
    super()this.state = {
      val: ''}
  }
  inputChange (e) {this.setState({val: e.target.value})
  }
  render () {
    let val = this.state.valreturn (      <section>{val}<InputComponent val={val} inputChange={this.inputChange.bind(this)}/>
      </section>    )
  }
}
ログイン後にコピー

react-router提供了前端路由基本的需求,根据需要使用到的功能在项目文档介绍中即可找到具体使用方法。基本的配置和其他框架也是大同小异,但是很多API的使用确有些大相径庭(和vue相比),还是需要仔细通读文档的,以免在开发中出现问题再去解决浪费时间,如IndexRoutevue中可以在子路由通过''这样的空字符来作为默认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中进行处理后在dispathactionreducer(比如网络请求)。值得注意的是每次dispath一个actionRedux都会遍历所有已经注册的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

新しいテクノロジーを学ぶための最も基本的な方法は、もちろん、単一ページのアプリケーションであるため、React を使用しない場合、フロントエンドのルーティングを見逃すことはありません。 Reduce を使用すると、その役割を果たしていないように感じます (実際には必要な関係はありませんが)。ここでは、<code>reactreact-routerreact-redux を使用します。 以下は、React を使用した開発です。この記事を読んでいただければ幸いです。もし何か間違った点があったとしても、私は責任を負いません。

最初のステップは、React のドキュメントを読むことです。このドキュメントでは、React を設計する方法など、開発に React を使用する方法を多数の例を使用して紹介しています。 code>state、props、コンポーネント間の通信方法、コンポーネントの設計方法など。文書ではそれが詳しく紹介されていますが、美しさを発見するには実際の練習が必要なことがよくあります。たとえば、stateprops の設計には、X 内に YZ があります。 > コンポーネント。 >Y コンポーネントには入力ボックスがあり、Z コンポーネントは Y によって入力された値を使用する必要があると仮定した 2 つのコンポーネントです。 code> コンポーネントで確認する もちろん、一緒に書くことも不可能ではありませんが、コンポーネントの再利用や単一機能などを考慮すると、分離した方が合理的です。では、この値をどのコンポーネントに格納するか。次の 2 つのコンポーネントは YX です。この設計は明らかに state 設計に準拠しておらず、冗長な部分が多すぎます。 🎜
rrreee
rrreee
🎜以下の書き方をすると見栄えが良くなるかもしれません🎜
rrreee
rrreee
🎜react-router は、フロントエンド ルーティングの基本的な要件を提供します。具体的な使用方法は、プロジェクト ドキュメントの概要に記載されています。必要な機能へ。基本的な構成は他のフレームワークと似ていますが、多くの API の使用法は (vue と比較して) かなり異なります。問題が発生したときに解決するために時間を無駄にしないように、ドキュメントを注意深く読む必要があります。たとえば、vueIndexRoute は、デフォルトの UI としてサブルートで '' のような null 文字を使用できます。コード>。 🎜
rrreee
🎜react-redux では、Redux を表面から理解するための簡単な紹介を行いました。 Redux を使用すると、開発中の思考時間が短縮され、起こり得るいくつかの問題が回避されます。 Redux を使用すると、必然的にコンポーネント内に大量の dispatch が発生し、プロジェクトの維持が困難になるのを防ぐ方法も使用中に発見されました。複雑かつ大規模になる場合も検討する価値がありますか?改訂された Web サイトは、ページ + コンポーネントの方法を使用して開発されています。ページは、次のコンポーネントを除く最も高度なコンポーネントを表します。ページのみが reducer に対して action を使用すると、複数のコンポーネントによって共有されるすべてのデータが、ページ内の <code>props を介して子コンポーネントに渡されます。子コンポーネントがデータを更新する必要がある場合は、props を介して親を呼び出します。 > 属性。コンポーネントによって渡されるメソッドは、ページ内で dispath を使用して、データ更新のために reducer を呼び出す action を指定します。もちろん、action で処理した後、dispathaction に移動して reducer を実行することも必要になる場合があります。ネットワークリクエストとして)。 dispathaction になるたびに、Redux が登録されているすべての reducer を走査することは注目に値します (reducer は多くの場合、合成されます)複数のサブリデューサーで構成されます)、つまり、すべての reducer が呼び出されます (これは、プロジェクトのパフォーマンスとドキュメントからのケースです)。reducer改訂された Web サイトで使用されているコード > コードの一部。 🎜<div class="cnblogs_code">rrreee</div> <div class="cnblogs_code">rrreee</div>🎜 <code>React を本格的に使うのは初めてなので使ってみた感想 Redux およびその他の状態管理ツールが開発に使用され (vuex も使用されますが、これらはプロジェクト全体に基づくものではありません)、開発プロセスはより制御可能になり、データ フローの方向が明確になります。開発中の各ツールのカップリングも低いので、全体的には良い試みです。しかし、どのようなテクノロジーを利用するにしても、ビジネスが拡大するにつれて複雑さは確実に高まり、安定して堅牢で保守しやすいプロジェクトを維持することは難しくなるだろうと個人的に感じています。 🎜🎜最後に、良いプログラミング習慣の重要性を嘆かなければなりません。 🎜

以上がReact を使用して Web サイトを作成した経験の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート