一、 元素渲染: eg. 只渲染已更新部分的数据
<script type="text/babel">
setInterval(() => {
var user = {
username: '王强',
age: 30,
date: new Date().toLocaleTimeString()
}
ReactDOM.render(
<h1 name='guonan' className='red'>你好世界, {user.date}</h1>,
document.getElementById('app')
), 1000
})
</script>
二、基本语法
函数式组件(无状态组件)
<script type="text/babel"> // 函数时标签 function Hello(props) { console.log(props) return <div> <h1>Hello, {props.name}</h1> <p>年龄:{props.age}</p> </div> } ReactDOM.render( <Hello name='王强' age='30'/>, document.getElementById('app') ) </script>
React.Component
<script type="text/babel"> // React.Component class Hello extends React.Component{ render(){ console.log(this) return <h1>Hello {this.props.name},年龄:{this.props.age}</h1> } } ReactDOM.render( <Hello name='王强' age='30'/>, document.getElementById('app') ) </script>
三、生命周期
- 组件初始化阶段
- 组件加载阶段
- 数据更新阶段
组件销毁阶段
<script type="text/babel"> // React.Component class Hello extends React.Component{ constructor(props){ // 初始化props super(props) // 初始化数据 this.state = { username: '王强', age: 550 } console.log('初始化构造函数') } // 数据加载阶段 componentWillMount(){ console.log('组件加载前') } componentDidMount(){ console.log('组件加载完成') } // 数据更新阶段 shouldComponentUpdate(){ console.log('数据是否需要更新') return true } componentWillUpdate(){ console.log('数据将要更新') } componentDidUpdate(){ console.log('数据更新完成') } updateUser = () => { this.setState({ username: '刘华强', age: 66 }) } render(){ console.log('组件加载或者数据更新') return <div> <h1>Hello 姓名:{this.state.username},年龄:{this.state.age}</h1> <button onClick={this.updateUser}>数据更新</button> </div> } } ReactDOM.render( <Hello/>, document.getElementById('app') ) </script>
<script type="text/babel">
function Login(props) {
return <button onClick={props.updateUser}>登录</button>
}
function Logout(props) {
return <button onClick={props.updateUser}>退出</button>
}
// React.Component
class App extends React.Component {
state = {
isLogin: false
}
// 数据加载阶段
componentWillMount() {
console.log('组件加载前')
}
componentDidMount() {
console.log('组件加载完成')
}
// 数据更新阶段
shouldComponentUpdate() {
console.log('数据是否需要更新')
return true
}
componentWillUpdate() {
console.log('数据将要更新')
}
componentDidUpdate() {
console.log('数据更新完成')
}
updateUser = () => {
this.setState({
isLogin: !this.state.isLogin
})
}
render() {
console.log('组件加载或者数据更新')
let isLogin = this.state.isLogin
return <div>
<h1>Hello World</h1>
{isLogin ? <Logout updateUser={this.updateUser}/> : <Login updateUser={this.updateUser}/>}
<button onClick={this.updateUser}>数据更新</button>
</div>
}
}
ReactDOM.render(
<App />,
document.getElementById('app')
)
</script>
四、React-Router
路由的基本配置
路由动态配置
React Hooks
/detail/:2021
Redirect/404
JS中路由跳转
路由Hooks ( 函数式组件中使用 )