zoukankan      html  css  js  c++  java
  • ③ 组件&props

    1 函数组件 & class 组件

    • react 组件:接收唯一带有数据的 props 对象与返回一个 react 元素
      // 函数组件
      function Welcome(props) {
        return <h1>Hello, { props.name }</h1>
      }
    
      // class组件
      class Welcome extends React.Component {
        render() {
          return <h1>Hello, { this.props.name }</h1>
        }
      }
    

    2 渲染组件

    • 当 React 元素为用户自定义组件时,会将 JSX 所接收的属性以及子组件转换为 props 对象传递给组件
      function Welcome(props) {
        return <h1>Hello, { props.name }</h1>
      }
      const element = <Welcome name="Sara" />
      ReactDOM.render(
        element,
        document.getElementById('root')
      )
    
    注意:组件名称必须以大写字母开头
    • React 会将以小写字母开头的组件视为原生 DOM 标签

    3 组合组件

    • 组件可以在其输出中引用其他组件
      function Welcome(props) {
        return <h1>Hello, { props.name }</h1>
      }
      function App() {
        return (
          <div>
            <Welcome name="Sara" />
            <Welcome name="Cahel" />
            <Welcome name="Edite" />
          </div>
        )
      }
      ReactDOM.render(
        <App />,
        document.getElementById('root')
      )
    

    4 提取组件

    • 将组件拆分为更小的组件
      function Comment(props) {
        return (
          <div className="Comment">
            <div className="UserInfo">
              <img className="Avatar"
                src={ props.author.avatarUrl }
                alt={ props.author.name }
              />
              <div className="UserInfo-name"> { props.author.name } </div>
            </div>
            <div className="Comment-text"> { props.text } </div>
            <div className="Comment-date"> { formatDate(props.date) } </div>
          </div>
        )
      }
    
    • 该组件由于嵌套关系导致难以维护,很难复用其各个部分

    4.1 提取 Avatar 组件

    • 建议从组件自身的角度命名 props,而不是依赖于调用组件的上下文命名
      function Avatar(props) {
        return (
          <img className="Avatar" 
            src={ props.user.avatarUrl }
            alt={ props.user.name }
          />
        )
      }
      function Comment(props) {
        return (
          <div className="Comment">
    	<div className="UserInfo">
    	  <Avatar user={ props.author } />
    	  <div className="UserInfo-name"> { props.author.name } </div>
    	</div>
    	<div className="Comment-text"> { props.text } </div>
    	<div className="Comment-date"> { formatDate(props.date) } </div>
          </div>
        )
      }
    

    4.2 提取 UserInfo 组件

    • 该组件在用户名旁渲染Avatar组件
      function UserInfo(props) {
        return (
          <div className="UserInfo">
            <Avatar user={ props.user } />
            <div className="UserInfo-name"> { props.user.name } </div>
          </div>
        )
      }
      function Comment(props) {
        return (
          <div className="Comment">
            <UserInfo user={ props.author } />
    	<div className="Comment-text"> { props.text } </div>
    	<div className="Comment-date"> { formatDate(props.date) } </div>
          </div>
        )
      }
    

    5 Props 的只读性

    • 组件无论是使用函数声明还是通过 class 声明,都决不能修改自身的 props

    • 所有 React 组件都必须像纯函数一样保护它们的 props 不被更改。

  • 相关阅读:
    关于托管存储过程的部署, 调试和性能
    Fast Fourier Transform in C# (CookyTurkey)
    The Story of Lena(.tiff)
    反射之反思(转)
    分享Oracle9i中建立自增字段的最新办法
    C#操作注册表
    Oracle服务器的常用命令行详细讲解
    为汶川受灾群众祈福!!!!!
    新的开始,新的起点
    完全删除Oracle数据库的方法
  • 原文地址:https://www.cnblogs.com/pleaseAnswer/p/15329528.html
Copyright © 2011-2022 走看看