react(三)
深入 JSX 从本质上讲,JSX 只是为? // JSX代码: <MyButton color="blue" shadowSize={2}>Click Me</MyButton> // 编译为: React.createElement( MyButton,{color: ‘blue‘,shadowSize: 2},‘Click Me‘ ) 如果不存在子节点,你可以使用自闭合(self-closing)格式的标签。 // JSX代码: <div className="sidebar" /> // 编译为: React.createElement( ‘div‘,{className: ‘sidebar‘},null ) ReactDOM.render( // <div className=‘sidebar‘ />, React.createElement( ‘div‘,null ),document.getElementById(‘container‘) ); a)指定 React 元素类型 一个 JSX 标签的开始部分决定了 React 元素的类型,首字母大写的标签指示 JSX 标签是一个 React 组件,这些标签会被编译成 命名变量 的直接引用。所以如果你使用 JSX? React 必须在作用域中。因为 JSX 被编译为? 例如,所有的 imports 在这段代码中都是必须的。如果你不使用 JavaScript 打包器,而是通过在? import React from ‘react‘; import CustomButton from ‘./CustomButton‘; function WarningButton() { // return React.createElement(CustomButton,{color: ‘red‘},null); return <CustomButton color="red" />; } b)对 JSX 类型使用点语法 在 JSX 中,你也可以使用点语法引用一个 React 组件。如果你有一个单一模块(module) ,但却导出(exports) 多个 React 组件时,这将会很方便。例如,如果? const MyComponents = { DatePicker(props) { return <div>Imagine a {props.color} datepicker here.</div>; } } function BlueDatePicker() { return <MyComponents.DatePicker color="blue" />; } c)用户定义组件必须以大写字母开头 当一个元素类型以小写字母开头,它表示引用一个类似于? d)JSX 中的 props(属性) props(属性) 默认为 “true” 如果你没给 prop(属性) 传值,那么他默认为? <MyTextBox autocomplete />
<MyTextBox autocomplete={true} />
通常情况下,我们不建议使用这种类型,因为这会与ES6中的对象shorthand混淆?。ES6 shorthand 中? ? Refs 和 DOM 不要过度使用 Refs:你可能首先会想到在你的应用程序中使用 refs 来更新组件。如果是这种情况,请花一点时间,更多的关注在组件层中使用 state。在组件层中,通常较高级别的 state 更为清晰。 在 DOM 元素上添加 Ref:React 支持给任何组件添加特殊属性。 class CustomTextInput extends React.Component { constructor(props) { super(props); this.focus = this.focus.bind(this); } focus() { // 通过使用原生API,显式地聚焦text输入框 this.textInput.focus(); } render() { // 在实例中通过使用`ref`回调函数来存储text输入框的DOM元素引用(例如:this.textInput) return ( <div> <input type="text" ref={(input) => { this.textInput = input; }} /> <input type="button" value="Focus the text input" onClick={this.focus} /> </div> ); } } ReactDOM.render( <CustomTextInput />,document.getElementById(‘container‘) ); ? 优化性能 使用生产版本:如果你在你的 React 应用程序中进行检测性能问题时,确保你正在使用压缩过的生产版本。默认情况下,React包含很多在开发过程中很有帮助的警告。然而,这会导致 React 更大更慢。因此,在部署应用时,请确认使用了生产版本。 最好在开发应用时使用开发模式,部署应用时换为生产模式。我们提供压缩好的生产版本的 React 和 React DOM 文件(注意只有结尾为? <script src="https://unpkg.com/[email?protected]/dist/react.min.js"></script> <script src="https://unpkg.com/[email?protected]/dist/react-dom.min.js"></script> 避免重新渲染:React 构建并维护渲染 UI 的内部表示。它包括你从组件中返回的 React 元素。这些内部状态使得 React 只有在必要的情况下才会创建DOM节点和访问存在DOM节点,因为对 JavaScript 对象的操作是比 DOM 操作更快。这被称为”虚拟DOM”。当组件的 props 和 state 改变时,React 通过比较新返回的元素 和 之前渲染的元素 来决定是否有必要更新DOM元素。当二者不相等时,则更新 DOM 元素。 ? React 顶层 API
React 组件允许你将UI拆分为独立的可重用的模块,并且每个模块逻辑也是独立的。 React组件可以通过扩展?
每个组件都有几个 “生命周期方法” ,前缀为?
在 React 组件被装载(mounted)前,该组件的 constructor(构造函数) 将被调用。当实现?
第一个参数可以是一个? ? ReactDOM 如果使用? React支持所有流行的浏览器,包括 Internet Explorer 9 及更高版本。 ReactDOM.render(
element,container,[callback]
)
渲染一个 React 元素到由? ? DOM 元素 在 React 中,所有 DOM properties 和 attributes(包括事件处理程序)都应该是驼峰命名法命名。 例如,HTML 属性? 属性中的差异 - 有许多属性在 React 和 HTML 之间有不同的使用方式,如: className:一般要指定 CSS 类,使用? style(一般不建议在元素上应用? <form style={{backgroundColor:‘#fff‘,fontSize:‘14px‘}} className="search-form"></form> 浏览器渲染结果: const divStyle = { WebkitTransition: ‘all‘,// 注意这里的大写首字母 ‘W‘ msTransition: ‘all‘ // ‘ms‘ ‘ms‘是唯一的小写字母的浏览器前缀,大小写均可 }; function ComponentWithTransition() { return <div style={divStyle}>This should work cross-browser</div>; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |