- React Components
- Christopher Pitt
- 271字
- 2021-07-09 19:34:45
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.
- Java入門經(jīng)典(第6版)
- Java EE 6 企業(yè)級(jí)應(yīng)用開發(fā)教程
- 樂高機(jī)器人設(shè)計(jì)技巧:EV3結(jié)構(gòu)設(shè)計(jì)與編程指導(dǎo)
- VMware vSphere 6.7虛擬化架構(gòu)實(shí)戰(zhàn)指南
- Python GUI Programming Cookbook
- Java Web程序設(shè)計(jì)
- Python程序設(shè)計(jì)案例教程
- 零基礎(chǔ)學(xué)Python數(shù)據(jù)分析(升級(jí)版)
- EPLAN實(shí)戰(zhàn)設(shè)計(jì)
- 小學(xué)生C++創(chuàng)意編程(視頻教學(xué)版)
- Hands-On Functional Programming with TypeScript
- Spring 5 Design Patterns
- Elasticsearch Essentials
- Android嵌入式系統(tǒng)程序開發(fā)(基于Cortex-A8)
- Developer,Advocate!