类组件继承自React的Component类,具有一个组件的完整生命周期
以下生命周期适用于React0.14.9版本,以上版本生命周期发生较大变化
componentDidMount
:组件初次挂载到页面时执行,只会在组件挂载时执行一次
挂载的含义以后再进行解释,现在我也理解的不是很清除,也希望大神们可以给我留言教教我
组件的数据来源
组件的数据来源有两种
:Props
,State
Props
来源于实例化组件时传递给组件的参数
<SimpleComponent
title = "Simple Component"
defaultText = "Type here"
/>
State
State
以对象的形式保存在组件上,通常是调用方法setState方法去改变组件的state。
setState(updater,[,callback])
方法接受两个参数,返回的是一个要更新this.state的对象,或者返回改对象的函数,callback是更新完成后的执行的回调函数。
setState
是一个批量异步的操作,react
会在短时间内批量更新,callback
函数调用时才会访问到更新后的state
组件方法
setState()
:更新组件的State,有机会触发render()
执行
forceUpdate()
:强制执行一次render()
数据传递
先上一段代码
import * as React from 'react'
import * as ReactDOM from 'react-dom'
class SimpleComponent extends React.Component {
state = {}
componentDidMount() {
this.setState({text: this.props.defaultText})
}
render() {
return (
<div>
<h1>{
this.props.title
}
</h1>
<div>
<input
type="text"
value={this.state.text}
onChange={(event) =>this.updateText(event.target.value)}
/>
</div>
<div>
{this.state.text }
</div>
</div>)
}
updateText(text)
{
this.setState({text: text})
}
}
class App extends React.Component {
state = {
title: 'initial title'
}
componentDidMount() {
setTimeout(() => {
this.setState({title: "title changed"})
}, 1000)
}
render(){
return(<SimpleComponent
title={this.state.title}
defaultText="Type here"
/>)
}
}
ReactDOM.render(
<div>
{/*<SimpleComponent*/}
{/*title = "iiii"*/}
{/*defaultText = 'iuiuiihi'*/}
{/*/>*/}
<App />
</div>,
document.querySelector("#root")
)
运行的最终结果如图:
在
App
挂载时,界面显示initial title
,随后会触发一个定时器,1s
之后显示title changed
。写代码时要注意,render()
函数一定要有return
语句,不然运行后界面无内容
子组件与子元素
子组件
是指在一个组件的render()
函数中使用到的另一个组件,比如App
中使用了SimpleComponent
,则SimpleComponent
是App
的子组件。
子元素
是JSX
中组件的嵌套关系,input
是div
的子元素
<div>
<input
type="text"
value={this.state.text}
onChange={(event) =>this.updateText(event.target.value)}
/>
</div>
无状态组件
通常为纯函数形式,返回JSX
片段。无状态组件没有state
,接受props
作为函数参数,通常进行一些数据展示的功能