你可以任意地在 JSX 当中使用 JavaScript 表达式,在 JSX 当中的表达式要包含在大括号里
JSX 本身其实也是一种表达式,在编译之后呢,JSX 其实会被转化为普通的 JavaScript 对象
因为 JSX 的特性更接近 JavaScript 而不是 HTML , 所以 React DOM 使用 camelCase 小驼峰命名 来定义属性的名称,而不是使用 HTML 的属性名称
Babel 转译器会把 JSX 转换成一个名为 React.createElement() 的方法调用
当React遇到的元素是用户自定义的组件,它会将JSX属性作为单个对象传递给该组件,这个对象称之为“props”
组件名称必须以大写字母开头。例如,
表示一个DOM标签,但
表示一个组件,并且在使用该组件时你必须定义或引入它。
Props的只读性,无论是使用函数或是类来声明一个组件,它决不能修改它自己的props
所有的React组件必须像纯函数那样使用它们的props
不要直接更新状态
状态更新可能是异步的,React 可以将多个setState() 调用合并成一个调用来提高性能。
状态更新合并
数据自顶向下流动
React事件绑定属性的命名采用驼峰式写法,而不是小写
如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM元素的写法)
通常情况下,如果你没有在方法后面添加 () ,例如 onClick={this.handleClick},你应该为这个方法绑定 this
渲染多个组件,你可以通过使用{}在JSX内构建一个元素集合
Keys可以在DOM中的某些元素被增加或删除的时候帮助React识别哪些元素发生了变化。因此你应当给数组中的每一个元素赋予一个确定的标识
在React应用中,对应任何可变数据理应只有一个单一“数据源”。通常,状态都是首先添加在需要渲染数据的组件中。此时,如果另一个组件也需要这些数据,你可以将数据提升至离它们最近的父组件中。你应该在应用中保持 自上而下的数据流,而不是尝试在不同组件中同步状态
由于 JSX 编译后会调用 React.createElement 方法,所以在你的 JSX 代码中必须首先声明 React 变量
你不能使用表达式来作为 React 元素的标签
如果你没有给属性传值,它默认为 true
如果你已经有了个 props 对象,并且想在 JSX 中传递它,你可以使用 ... 作为扩展操作符来传递整个属性对象
不要过度使用 Refs
你可能首先会想到在你的应用程序中使用 refs 来更新组件。如果是这种情况,请花一点时间,更多的关注在组件层中使用 state。在组件层中,通常较高级别的 state 更为清晰。有关示例,请参考状态提升.
为了在类上设置一个属性使用 ref 回调是访问 DOM 元素的常见模式。首先的方法就如上面的例子中一样设置 ref。甚至还有更简短的写法: ref={input => this.textInput = input}
受控=数据绑定,非受控=不绑定
如果你知道在某些情况下你的组件不需要更新,你可以在shouldComponentUpdate内返回false来跳过整个渲染进程,该进程包括了对该组件和之后的内容调用render()指令
React 中一个常见模式是为一个组件返回多个元素。Fragments 可以让你聚合一个子元素列表,并且不在DOM中增加额外节点
你应该在 componentDidMount 生命周期方法内发送 AJAX 请求数据。这样你才能够在请求的数据到达时使用 setState 更新你的组件
render()方法是必须的
render()函数应该纯净,意味着其不应该改变组件的状态,其每次调用都应返回相同的结果,同时不直接和浏览器交互。若需要和浏览器交互,将任务放在componentDidMount()阶段或其他的生命周期方法。保持render() 方法纯净使得组件更容易思考。
当前,若shouldComponentUpdate()返回false,而后componentWillUpdate(),render(), 和 componentDidUpdate()将不会被调用。注意,在未来React可能会将shouldComponentUpdate()作为一个线索而不是一个严格指令,返回false可能仍然使得组件重渲。
将setState()认为是一次请求而不是一次立即执行更新组件的命令。为了更为客观的性能,React可能会推迟它,稍后会一次性更新这些组件。React不会保证在setState之后,能够立刻拿到改变的结果。
ReactDOM.render() 会使用你的 JSX 来替换你的 HTML 中的一个 DOM 节点。这 样你就可以很容易地把 React 集成到每一个其他的应用中。
函数式无状态组件: 这类组件就是函数,它们接收一个输入并返回一个输出。输入是 props,输出就是一个普通的 JSX 组件实例。