官术网_书友最值得收藏!

Component life cycle methods

There are a couple of tricks I want to show you before we wrap up. The first is a life cycle method we can use to tell when a component's properties will change. We can use this to change the appearance of a component, or refresh the internal state.

We can add this method to PageEditor, for example:

class PageEditor extends Component {
    constructor(props) {
        super(props);

        this.state = {
            "changed": false
        };

        this.bind(
            "onCancel",
            "onUpdate"
        );
    }

    isChanged(next, previous) {
 return JSON.stringify(next) !== JSON.stringify(previous)
 }

 componentWillReceiveProps(props) {
 this.setState({
 "changed": this.isChanged(props, this.props)
 });
 }

    render() {
        return <p>
            <input
                type="text"
                name="title"
                value={this.props.title}
                onChange={this.onUpdate}
                />
            <textarea
                name="body"
                value={this.props.body}
                onChange={this.onUpdate}>
            </textarea>
            <button
                onClick={this.onCancel}>
                cancel
            </button>
        </p>;
    }

    onUpdate() {
        this.props.onUpdate(
            this.props.id,
            event.target.name,
            event.target.value
        );
    }

 onCancel(event) {
 event.preventDefault();
 this.props.onCancel();
 }
}

We can now tell when the page changes, even though the changes are immediately propagated.

Another magic method we can use will help cut down on the comparisons React needs to perform. It's called shouldComponentUpdate and we can add it to PageView:

class PageView extends Component {
    constructor(props) {
        super(props);

        this.bind(
            "onDelete"
        );
    }

    isChanged(next, previous) {
 return JSON.stringify(next) !== JSON.stringify(previous)
 }
 
 shouldComponentUpdate(props, state) {
 return this.isChanged(props, this.props);
 }

    render() {
        return <p>
            {this.props.title}
            <button
                onClick={this.props.onEdit}
                >edit</button>
            <button
                onClick={this.onDelete}
                >delete</button>
        </p>;
    }

    onDelete() {
        this.props.onDelete(
            this.props.id
        );
    }
}

The shouldComponentUpdate method gives us a way to tell React not to look for changes in this component. At this scale, we're not likely to see huge performance improvements. But when we add this method to more complex layouts, it will drastically reduce the amount of work required to work out how the document should change.

We'll be using these tricks later, as we build more complex content management features.

主站蜘蛛池模板: 昌乐县| 瑞丽市| 通江县| 军事| 逊克县| 武义县| 昭平县| 广汉市| 阜平县| 东乌珠穆沁旗| 威远县| 渝北区| 含山县| 南靖县| 当雄县| 乌拉特中旗| 乌审旗| 广丰县| 元谋县| 丹东市| 新干县| 威信县| 准格尔旗| 邵东县| 武山县| 宁明县| 涞源县| 同仁县| 哈尔滨市| 莲花县| 安溪县| 永和县| 乌拉特中旗| 松阳县| 潜山县| 沭阳县| 突泉县| 叶城县| 金塔县| 花垣县| 清新县|