React 元素渲染(1)
元素是构成 React 应用的最小单位,它用于描述屏幕上输出的内容
<span class="kwd">const</span><span class="pln"> element </span><span class="pun">=</span><span class="pln"> </span><span class="str"><h1></span><span class="typ">Hello</span><span class="pun">,</span><span class="pln"> world</span><span class="pun">!</</span><span class="pln">h1</span><span class="pun">>;</span>首先我们在一个 HTML 页面中添加一个 id="example" 的 <div>
<span class="tag"><div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"example"</span><span class="tag">></div></span>在此 div 中的所有内容都将由 React DOM 来管理,所以我们将其称为 "根" DOM 节点。
我们用 React 开发应用时一般只会定义一个根节点。但如果你是在一个已有的项目当中引入 React 的话,你可能会需要在不同的部分单独定义 React 根节点。
要将React元素渲染到根DOM节点中,我们通过把它们都传递给 ReactDOM.render() 的方法来将其渲染到页面上:
React 元素都是不可变的。当元素被创建之后,你是无法改变其内容或属性的。
<head> <title>Hello React!</title><br /> <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script><br /> <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script><br /> <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script><br /> </head> <div id="example"></div><br /> <script type="text/babel"><br /> const element =<h1>Hello, world!</h1>;<br /> ReactDOM.render(<br /> element,<br /> document.getElementById('example')<br /> );<br /> </script>目前更新界面的唯一办法是创建一个新的元素,然后将它传入 ReactDOM.render() 方法:
来看一下这个计时器的例子
<head> <title>Hello React!</title><br /> <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script><br /> <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script><br /> <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script><br /> </head> <div id="example"></div><br /> <script type="text/babel"><br /> function tick() {<br /> const element = (<br /> <div><br /> <h1>Hello, world!</h1><br /> <h2>现在是 {new Date().toLocaleTimeString()}.</h2><br /> </div><br /> );<br /> ReactDOM.render(<br /> element,<br /> document.getElementById('example')<br /> );<br /> }<br /> <br /> setInterval(tick, 1000);<br /> </script>以上实例通过 setInterval() 方法,每秒钟调用一次 ReactDOM.render()。
我们可以将要展示的部分封装起来,以下实例用一个函数来表示:
<head><br /> <meta charset="UTF-8" /><br /> <title>Hello React!</title><br /> <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script><br /> <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script><br /> <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script><br /> </head><br /> <body> <div id="example"></div><br /> <script type="text/babel"><br /> function Clock(props) {<br /> return (<br /> <div><br /> <h1>Hello, world!</h1><br /> <h2>现在是 {props.date.toLocaleTimeString()}.</h2><br /> </div><br /> );<br /> } function tick() {<br /> ReactDOM.render(<br /> <Clock date={new Date()} />,<br /> document.getElementById('example')<br /> );<br /> } setInterval(tick, 1000);<br /> </script> </body>除了函数外我们还可以创建一个 React.Component 的 ES6 类,该类封装了要展示的元素,需要注意的是在 render() 方法中,需要使用 this.props 替换 props:
<head><br /> <meta charset="UTF-8" /><br /> <title>Hello React!</title><br /> <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script><br /> <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script><br /> <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script><br /> </head><br /> <body> <div id="example"></div><br /> <script type="text/babel"><br /> class Clock extends React.Component {<br /> render() {<br /> return (<br /> <div><br /> <h1>Hello, world!</h1><br /> <h2>现在是 {this.props.date.toLocaleTimeString()}.</h2><br /> </div><br /> );<br /> }<br /> } function tick() {<br /> ReactDOM.render(<br /> <Clock date={new Date()} />,<br /> document.getElementById('example')<br /> );<br /> } setInterval(tick, 1000);<br /> </script> </body>