React/JSXおよびReact Native符号化仕様

5145 ワード

最近、会社のフロントエンドのウェブショッピングモール(React)と前期アプリ(React Native)のメンテナンスを研究し始め、同僚間のコードスタイルの差が大きすぎることを発見し、後でコードをよりよく読むために、ReactとJSXのいくつかのコード規範を整理した。


1.基本規範

  • 各ファイルにはReactコンポーネントが1つしか含まれておらず、名前は名前の意味を考慮します.
  • React NativeとReactは、ES 6構文を可能な限り使用します.
  • consoleはデバッグ時に書き、デバッグが完了するとすぐに削除します.

  • 2.命名規範

  • ファイル名:フォルダとファイル名は、HomeIndexのような大きなアルパカの命名法を使用します.js; 共通のコンポーネントはComponentフォルダに配置されます.入口ファイルは明確にし、一般的にindexを使用することができる.js. React Nativeではandroid/iosの一方の機能のみがファイルの末尾に付加する.android/.ios、例えばKeyBoard.android.jsとKeyBoardios.js.1、2、3、one、two、threeなどの名前を消し、機能やモジュールで名前を付けます.オリジナルandroid/iosを呼び出しても同じように書きます.jsファイル内は、Dialogなどの用途が広い場合はBaseViewフォルダに置くことができ、そうでない場合はAction対応のビジネスフォルダに置くことができます.

  • 3.属性


    3.1属性名

  • コンポーネントのプロパティは、アルパカ命名法を使用します.
  • ReactではclassNameがclass属性に代わり、htmlForがfor属性に代わります.
  • 外注スタイルを使用する場合は、プロパティ名にStyleキーが付いていることが望ましい.例えば、flexStyle.js

  • 3.2属性の設定

  • パッケージされたコンポーネント内では、プロパティの値を外部で変更しないようにプロパティを設定する必要があります(propTypeチェック).
  • 属性は{...this.props}構文を多く使用します.(属性の先頭に{...this.props}を付け、属性の書き込みを少なくするためにエラーが発生することを防止することが望ましい)
  • プロパティ値の設定を繰り返すと、前の値が後の値で上書きされます.

  • 3.3属性の配置

  • 属性が少ない場合は
  • 行内に配列することができる.
  • 属性が多い場合は行ごとに1属性、閉じたラベルは単独で行
  • になる.

    3.4行内反復

  • 演算ロジックは、行内反復を簡単に直接使用します.
  • return (
      
    {this.props.data.map(function(data, i) { return () })}
    );

    4.コメント

  • コンポーネント間のコメントは、{/*コメント内容*/}で包む必要があります.
  • var content = (
      
    );
    

    5.引用符の使用

  • HTML/JSXプロパティは二重引用符を使用します";
  • JSは単一引用符';
  • // bad
    
    // good
    
    // bad
    
    // good
    
    // JavaScript Expression
    const person = ;
    // HTML/JSX
    const myDivElement = 
    ; const app =

    6.条件HTML

    • 简短的输出在行内直接三元运算符;
    {this.state.show && 'This is Shown'}
    {this.state.on ? 'On' : 'Off'}
    
  • のより複雑な構造は、render()メソッドでは、Htmlで終わる変数を定義します.
  • var dinosaurHtml = '';if (this.state.showDinosaurs) { dinosaurHtml = ( 
    );}return (
    ... {dinosaurHtml} ...
    ); [ ](https://github.com/minwe/style-guide/blob/master/React.js.md#- )

    7.()使用

  • 複数行のJSXは()ラップを使用し、コンポーネントがネストされている場合は複数行モードを使用する.
  • // bad
    return (
    ); // good var multilineJsx = (
    ); // good return (
    );
  • 単行JSX省略()です.
  • var singleLineJsx = 

    Simple JSX

    ; // good, when single line render() { const body =
    hello
    ; return {body}; }

    8.自閉ラベル

  • JSXのすべてのラベルは閉じなければなりません.
  • サブエレメントを持たないコンポーネントは、閉じたラベル/前にスペースを残す自閉法を使用します.
  • // bad
    
    
    // very bad
    
    // bad
    
    // good
    
    

    9.コンポーネント内部コード組織

  • 下線接頭辞を使用してReactコンポーネントの名前を付けない方法.
  • // bad
    React.createClass({
      _onClickSubmit() {
        // do stuff
      }
      // other stuff
    });
    // good
    React.createClass({
      onClickSubmit() {
        // do stuff
      }
      // other stuff
    });
    
  • ライフサイクルグループの順序に従ってコンポーネントを織る方法、属性;
  • メソッド(プロパティ)の間に空の行があります.
  • .render()メソッドは常に最後に配置されます.
  • カスタムメソッドReact APIメソッドの後、render()の前に.
  • // React  
    React.createClass({  
      displayName: '',
      mixins: [],
      statics: {},
      propTypes: {},
      getDefaultProps() {
        // ...
      },
      getInitialState() {
        // do something
      },
      componentWillMount() {
        // do something
      },
      componentDidMount() {
        // do something: add DOM event listener, etc.
      },
      componentWillReceiveProps() {
      },
      shouldComponentUpdate() {},
      componentWillUpdate() {},
      componentDidUpdate() {},
      componentWillUnmount() {
        // do something: remove DOM event listener. etc.
      },
      // clickHandlers or eventHandlers like onClickSubmit() or onChangeDescription()
      handleClick() {
        // ...
      },
      // getter methods for render like getSelectReason() or getFooterContent()
      // Optional render methods like renderNavigation() or renderProfilePicture()
      render() {
        // ...
      }
    });