react组件定义(react组件命名规范)

react组件定义(react组件命名规范)每个文件只包含一个 React 组件 使用 JSX 语法 除非是从一个非 JSX 文件中初始化 app 否则不要使用 React createElemen lt ul gt Class vs React createClass 除非有更好的理由使用混淆 mixins 否则就使用组件类继承 React Component eslint 规则

大家好,我是讯享网,很高兴认识大家。



  • 每个文件只包含一个 React 组件
  • 使用JSX语法
  • 除非是从一个非JSX文件中初始化 app,否则不要使用React.createElement
  • </ul>

    Class vs React.createClass

    • 除非有更好的理由使用混淆(mixins),否则就使用组件类继承React.Component。eslint 规则:react/prefer-es6-class
    • </ul>

      // bad const Listing = React.createClass({ render() {

      return <div />; 

      讯享网

      } });

      // good class Listing extends React.Component { render() {

      讯享网return <div />; 

      } }</pre>

      • 扩展名: 使用jsx作为 React 组件的扩展名
      • 文件名: 文件命名采用帕斯卡命名法,如:ReservationCard.jsx
      • 引用名: 组件引用采用帕斯卡命名法,其实例采用驼峰式命名法。eslint rules: react/jsx-pascal-case
      • </ul>

        // bad const reservationCard = require(’https://www.open-open.com/lib/view/ReservationCard’);

        // good const ReservationCard = require(’https://www.open-open.com/lib/view/ReservationCard’);

        // bad const ReservationItem = <ReservationCard />;

        // good const reservationItem = <ReservationCard />;</pre>

        • 组件命名: 使用文件名作为组件名。例如:ReservationCard.jsx组件的引用名应该是ReservationCard。然而,对于一个目录的根组件,应该使用index.jsx作为文件名,使用目录名作为组件名。
        • </ul>

          // bad const Footer = require(’https://www.open-open.com/lib/view/Footer/Footer.jsx’)

          // bad const Footer = require(’https://www.open-open.com/lib/view/Footer/index.jsx’)

          // good const Footer = require(’https://www.open-open.com/lib/view/Footer’)</pre>

          • 不要通过displayName来命名组件,通过引用来命名组件
          • </ul>

            // bad export default React.createClass({ displayName: ‘ReservationCard’, // stuff goes here });

            // good export default class ReservationCard extends React.Component { }</pre>

            • 对于JSX语法,遵循下面的对齐风格。eslint rules: react/jsx-closing-bracket-location
            • </ul>

              // bad <Foo superLongParam=“bar”

               anotherSuperLongParam="baz" /&gt;</p> 

              // good &lt;Foo

              讯享网superLongParam="bar" anotherSuperLongParam="baz" 

              /&gt;

              // if props fit in one line then keep it on the same line &lt;Foo bar=“bar” /&gt;

              // children get indented normally &lt;Foo

              superLongParam="bar" anotherSuperLongParam="baz" 

              &gt;

              讯享网&lt;Spazz /&gt; 

              &lt;/Foo&gt;&lt;/pre&gt;

              • 对于JSX使用双引号,对其它所有 JS 属性使用单引号
              • &lt;/ul&gt;

                为什么?因为 JSX 属性不能包含被转移的引号,并且双引号使得如”don’t”一样的连接词很容易被输入。常规的 HTML 属性也应该使用双引号而不是单引号,JSX 属性反映了这个约定。

                &lt;/blockquote&gt;

                eslint rules: jsx-quotes

                // bad &lt;Foo bar=‘bar’ /&gt;

                // good &lt;Foo bar=“bar” /&gt;

                // bad &lt;Foo style={{ left: “20px” }} /&gt;

                // good &lt;Foo style={{ left: ‘20px’ }} /&gt;&lt;/pre&gt;


                讯享网

                • 在自闭和标签之前留一个空格
                • &lt;/ul&gt;

                  // bad &lt;Foo/&gt;

                  // very bad &lt;Foo /&gt;

                  // bad &lt;Foo /&gt;

                  // good &lt;Foo /&gt;&lt;/pre&gt;

                  • 属性名采用驼峰式命名法
                  • &lt;/ul&gt;

                    // bad &lt;Foo UserName=“hello” phone_number={} /&gt;

                    // good &lt;Foo userName=“hello” phoneNumber={} /&gt;&lt;/pre&gt;

                    • 当组件跨行时,要用括号包裹 JSX 标签。eslint rules: react/wrap-multilines
                    • &lt;/ul&gt;

                      /// bad render() {

                      return &lt;MyComponent className="long body" foo="bar"&gt; &lt;MyChild /&gt; &lt;/MyComponent&gt;; 

                      }

                      // good render() {

                      讯享网return ( &lt;MyComponent className="long body" foo="bar"&gt; &lt;MyChild /&gt; &lt;/MyComponent&gt; ); 

                      }

                      // good, when single line render() {

                      const body = &lt;div&gt;hello&lt;/div&gt;; return &lt;MyComponent&gt;{body}&lt;/MyComponent&gt;; 

                      }&lt;/pre&gt;

                      • 没有子组件的父组件使用自闭和标签。eslint rules: react/self-closing-comp
                      • &lt;/ul&gt;

                        // bad &lt;Foo className=“stuff”&gt;&lt;/Foo&gt;

                        // good &lt;Foo className=“stuff” /&gt;&lt;/pre&gt;

                        • 如果组件有多行属性,闭合标签应写在新的一行上。eslint rules: react/jsx-closing-bracket-location
                        • &lt;/ul&gt;

                          // bad &lt;Foo

                          讯享网bar="bar" baz="baz" /&gt;</p> 

                          // good &lt;Foo

                          bar="bar" baz="baz" 

                          /&gt;&lt;/pre&gt;

                          • 不要对 React 组件的内置方法使用underscore前缀
                          • &lt;/ul&gt;

                            // bad React.createClass({ _onClickSubmit() {

                            讯享网// do stuff 

                            }

                            // other stuff });

                            // good class extends React.Component { onClickSubmit() {

                            // do stuff 

                            }

                            // other stuff });&lt;/pre&gt;

                            • 继承 React.Component 的类的方法遵循下面的顺序

                              &lt;/li&gt; &lt;/ul&gt;

                              1. constructor
                              2. optional static methods
                              3. getChildContext
                              4. componentWillMount
                              5. componentDidMount
                              6. componentWillReceiveProps
                              7. shouldComponentUpdate
                              8. componentWillUpdate
                              9. componentDidUpdate
                              10. componentWillUnmount
                              11. clickHandlers or eventHandlers like onClickSubmit() or onChangeDescription()
                              12. getter methods for render like getSelectReason() or getFooterContent()
                              13. Optional render methods like renderNavigation() or renderProfilePicture()
                              14. render

                                &lt;/li&gt; &lt;/ol&gt;

                                • 怎么定义 propTypes,defaultProps,contextTypes 等等…
                                • &lt;/ul&gt;

                                  import React, { PropTypes } from ‘react’;

                                  const propTypes = { id: PropTypes.number.isRequired, url: PropTypes.string.isRequired, text: PropTypes.string, };

                                  const defaultProps = { text: ‘Hello World’, };

                                  class Link extends React.Component { static methodsAreOk() {

                                  讯享网return true; 

                                  }

                                  render() {

                                  return &lt;a href=https://www.open-open.com/lib/view/{this.props.url} data-id={this.props.id}&gt;{this.props.text}&lt;/a&gt; 

                                  } }

                                  Link.propTypes = propTypes; Link.defaultProps = defaultProps;

                                  export default Link;&lt;/pre&gt;

                                  • 使用 React.createClass 时,方法顺序如下:

                                    &lt;/li&gt; &lt;/ul&gt;

                                    1. displayName
                                    2. propTypes
                                    3. contextTypes
                                    4. childContextTypes
                                    5. mixins
                                    6. statics
                                    7. defaultProps
                                    8. getDefaultProps
                                    9. getInitialState
                                    10. getChildContext
                                    11. componentWillMount
                                    12. componentDidMount
                                    13. componentWillReceiveProps
                                    14. shouldComponentUpdate
                                    15. componentWillUpdate
                                    16. componentDidUpdate
                                    17. componentWillUnmount
                                    18. clickHandlers or eventHandlers like onClickSubmit() or onChangeDescription()
                                    19. getter methods for render like getSelectReason() or getFooterContent()
                                    20. Optional render methods like renderNavigation() or renderProfilePicture()
                                    21. render
                                    22. &lt;/ol&gt;

                                      eslint rules: react/sort-comp

                                      来自:https://github.com/dwqs/react-style-guide

小讯
上一篇 2025-04-19 15:00
下一篇 2025-05-09 08:59

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/202158.html