zoukankan      html  css  js  c++  java
  • React jsx的理解

    React当中,我们使用JSX来指定React里的模板,可以把JSX理解为一个对象,React中可以在三个地方指定jsx,分别是ReactDOM.render()的参数、function组件的返回值和class组件内render函数的返回值,例如:

    <div id="root"></div>                   
    <script type="text/babel">
      function Show(){
        return <p>Show Function</p>               /*function 内返回一段jsx*/
      } 
      class App extends React.Component{ 
        render(){                                 /*class组件的render函数内返回一段jsx*/
          return  <div>
                    <h1>App Class</h1>
                    <Show></Show>
                  </div>
        }
      } 
      ReactDOM.render(<div><App/></div>,root)     /*ReactDOM.render()的参数1可以是一段jsx*/
    </script>

    在写jsx代码的时候推荐用括号把它们给包裹起来,这样可以防止分号自动插入的bug(官网这样说的,具体也不知道是什么bug=.=),

    jsx经过babel编译后会转化为一个React.createElement()函数,例如<div><App/></div>转化后的结果为:

     writer by:大沙漠 QQ:22969969

    React.createElement("div", null, /*#__PURE__*/React.createElement(App, null));

    我们可以通过https://babeljs.io/repl这个网站去在线转化jsx,看看转化后的结果是什么

    我们可以把jsx赋值给某个变量,又或者作为一个函数的参数去执行,例如:

    <div id="root"></div>                   
    <script type="text/babel">
      function Show(props){
        let p = props.isReact == 1 ? <p>Hello React</p> : <p>Hello World!</p>       /*将jsx赋值给p这个变量*/
        return <div>{p}</div>                                                       /*jsx的一个拼接*/
      }
    
      class App extends React.Component{
        constructor(props){
          super(props)
        }
        state = {isReact:1}
        test=  ()=>{
          this.setState({isReact:!this.state.isReact})
        }
        render(){                   
          return  <div>
                    <button onClick={this.test}>测试</button>
                    <Show isReact={this.state.isReact}></Show>
                  </div>
        }
      } 
      ReactDOM.render(<App/>,root)   
    </script>

    效果如下:

    我们在Show这个function组件内将jsx赋值给一个局部变量p,最后在return的时候进行了拼接。

  • 相关阅读:
    设计模式(十)外观模式
    设计模式(九)装饰器模式
    设计模式(八)组合模式
    设计模式(七)桥接模式
    设计模式(六)代理模式
    设计模式(五)适配器模式
    linux 安装 node
    LeetCode 335. Self Crossing
    LeetCode 332. Reconstruct Itinerary 最小欧拉路径
    LeetCode 327. Count of Range Sum 区间和的个数
  • 原文地址:https://www.cnblogs.com/greatdesert/p/12620336.html
Copyright © 2011-2022 走看看