咱们在使用 JSX 语法书写 react 代码时,babel 会将 JSX 语法编译成 js,同时会在每行自动添加分号(;),若是 return 后换行了,那么就会变成 return;react
渲染没有返回任何内容。这一般意味着缺乏 return 语句。或者,为了避免渲染,返回 null。git
为了代码可读性咱们通常会在 return 后面添加括号这样代码能够折行书写,不然就在 return 后面紧跟着语句.github
错误api
const Nav = () => { return <nav className="c_navbar"> { some jsx magic here } </nav> }
react 组件在每次须要从新渲染时候都会调用 componentWillUpdate(),浏览器
例如,咱们调用 this.setState()时候安全
在这个函数中咱们之因此不调用 this.setState()是由于该方法会触发另外一个 componentWillUpdate(),若是咱们 componentWillUpdate()中触发状态更改,咱们将以无限循环.babel
首先,什么是渲染劫持:渲染劫持的概念是控制组件从另外一个组件输出的能力,固然这个概念通常和 react 中的高阶组件(HOC)放在一块儿解释比较有明了。app
高阶组件能够在 render 函数中作很是多的操做,从而控制原组件的渲染输出,只要改变了原组件的渲染,咱们都将它称之为一种渲染劫持。ide
实际上,在高阶组件中,组合渲染和条件渲染都是渲染劫持的一种,经过反向继承,不只能够实现以上两点,还能够加强由原组件 render 函数产生的 React 元素。函数
实际的操做中 经过 操做 state、props 均可以实现渲染劫持
react-intl 实现 React 国际化多语言
新版本的 context api 中 经常使用的只有 Provider 和 Consumer 两个对象
import React, {Component} from 'react' // 首先建立一个 context 对象这里命名为:ThemeContext const ThemeContext = React.createContext('light') // 建立一个祖先组件组件 内部使用Provier 这个对象建立一个组件 其中 value 属性是真实传递的属性 class App extends Component { render () { return ( <ThemeContext.Provider value="dark"> <Toolbar /> </ThemeContext.Provider> ) } } // 渲染 button 组件的外层包裹的属性 function Toolbar () { return ( <div> <ThemeButton /> </div> ) } // 在 Toolbar 中渲染的button 组件 返回一个 consumer (消费者)将组件组件的 value 值跨组件传递给 // ThemeButton 组件 function ThemeButton (props) { return ( <ThemeContext.Consumer> { theme => <button {...props} theme={theme}>{theme}</button> } </ThemeContext.Consumer> ) }
React15 版本不直接支持 IE8 浏览器的,官方文档中说 React16 中依赖于集合类型 Map 和 Set 所以再也不支持 IE 11 如下的浏览器,若是想要支持,须要使用全局的 polyfill
对于 portal 的一个典型用例是当父组件有 overflow: hidden 或 z-index 样式,但你须要子组件可以在视觉上 “跳出(break out)” 其容器。例如,对话框、hovercards 以及提示框。因此通常 react 组件里的模态框,就是这样实现的
react 的 strictMode 是一个突出显示应用程序中潜在问题的工具,与 Fragment 同样,strictMode 不会渲染任何的可见 UI,它为其后代元素触发额外的检查和警告。
注意:严格模式仅在开发模式下运行,它们不会影响生产构建
能够为程序的任何部分使用严格模式
import React from 'react'; function ExampleApplication() { return ( <div> <Header /> <React.StrictMode> <div> <ComponentOne /> <ComponentTwo /> </div> </React.StrictMode> <Footer /> </div> ); }
在上述的示例中,不会对 Header 和 Footer 组件运行严格模式检查。可是,ComponentOne 和 ComponentTwo 以及它们的全部后代元素都将进行检查。
StrictMode 目前有助于: