ReactJS-类组件

2018-11-27  本文已影响0人  abrila

类组件继承自React的Component类,具有一个组件的完整生命周期

以下生命周期适用于React0.14.9版本,以上版本生命周期发生较大变化
componentDidMount:组件初次挂载到页面时执行,只会在组件挂载时执行一次
挂载的含义以后再进行解释,现在我也理解的不是很清除,也希望大神们可以给我留言教教我

组件的数据来源

组件的数据来源有两种PropsState

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")
)

运行的最终结果如图:

image.png
App挂载时,界面显示initial title,随后会触发一个定时器,1s之后显示title changed。写代码时要注意,render()函数一定要有return语句,不然运行后界面无内容

子组件与子元素

子组件是指在一个组件的render()函数中使用到的另一个组件,比如App中使用了SimpleComponent,则SimpleComponentApp的子组件。
子元素JSX中组件的嵌套关系,inputdiv的子元素

 <div>
                    <input
                        type="text"
                        value={this.state.text}
                        onChange={(event) =>this.updateText(event.target.value)}
                    />
</div>

无状态组件

通常为纯函数形式,返回JSX片段。无状态组件没有state,接受props作为函数参数,通常进行一些数据展示的功能

上一篇下一篇

猜你喜欢

热点阅读