React组件生命周期
什么是生命周期?组件本子上是状态机,输入确定,输出一定确定。 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Keywords" content="关键词一,关键词二">
<meta name="Description" content="网站描述内容">
<meta name="Author" content="刘艳">
<title></title>
</head>
<body>
<div id = "example"></div>
</body>
</html>
<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="build/browser.min.js"></script>
<script type="text/babel"> var HelloMessage = React.createClass({ getDefaultProps: function () { },getInitialState: function(){ return {liked: false} },componentWillMount: function(){ console.log("Component will mount"); },render: function(){ return <p ref = "one">Hello,{ (function(obj){ if(obj.props.name){ return obj.props.name; }else{ return "Message" } })(this)}</p> },compontentDidMount: function(){} }); ReactDOM.render(<HelloMessage></HelloMessage>,document.querySelector("#example")); </script>
初始化阶段介绍getDefaultProps——只调用一次,实例之间共享引用(属性) 操作真正的DOM节点:this.refs.XXX var Zoo = React.createClass({
render: function() {
return <div>Giraffe name: <input ref="giraffe" /></div>;
},showName: function() {
// 之前:
var input = this.refs.giraffe.getDOMNode();
// v0.14 版:
var input = this.refs.giraffe;
alert(input.value);
}
});
需要注意的是,如果你给自定义的 React 组件(除了 DOM 自带的标签,如 div、p 等)添加 refs,表现和行为与之前一致。 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Keywords" content="关键词一,关键词二">
<meta name="Description" content="网站描述内容">
<meta name="Author" content="刘艳">
<title></title>
</head>
<body>
<div id = "example"></div>
</body>
</html>
<script src="build/jquery-1.11.2.min.js"></script>
<script src = "build/react.js"></script>
<script src = "build/react-dom.js"></script>
<script src = "build/browser.min.js"></script>
<script type = "text/babel"> var count = 0; var HelloMessage = React.createClass({ getDefaultProps: function () { return {name: "Yvette"}; },getInitialState: function(){ return {myCount: count++,ready: false} },componentWillMount: function(){ this.setState({ready: true}) },{this.props.name ? this.props.name : "Message"} <br/> {+ this.state.ready} {this.state.myCount}</p> },componentDidMount: function(){ $(this.refs.one).append("<span>future</span>"); } }); ReactDOM.render(<div><HelloMessage></HelloMessage><HelloMessage></HelloMessage></div>,document.querySelector("#example")); </script>
运行中阶段介绍componentWillReceiveProps:父组件修改属性触发,可以修改新属性、修改状态。 销毁阶段介绍componentWillUnmount:在组件真正被销毁前调用,在删除组件之前进行清理操作,如计时器和事件监听器。 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Keywords" content="关键词一,关键词二">
<meta name="Description" content="网站描述内容">
<meta name="Author" content="刘艳">
<title></title>
</head>
<body>
<div id = "example"></div>
</body>
</html>
<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="build/browser.min.js"></script>
<script type="text/babel"> var style = { color: "red",border: "1px solid #000" }; var HelloWorld = React.createClass({ render: function(){ return <p>Hello,{this.props.name ? this.props.name : "World"}</p>; },componentWillUnmount: function(){ console.log("I will unmount"); } }); var HelloUniverse = React.createClass({ getInitialState: function(){ return {name: "Yvette"}; },handleChange: function (event) { if(event.target.value == "123"){ React.unmountComponentAtNode(document.querySelector("#example")) return; } this.setState({name: event.target.value}); },render: function(){ return( <div> <HelloWorld name = {this.state.name}></HelloWorld> <br/> <input type = "text" onChange = {this.handleChange} /> </div> ); } }); ReactDOM.render(<div style = {style}><HelloUniverse></HelloUniverse></div>,document.querySelector("#example")); </script>
在input中输入123,可以触发componentWillUnmount事件。 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Keywords" content="关键词一,关键词二">
<meta name="Description" content="网站描述内容">
<meta name="Author" content="刘艳">
<title></title>
</head>
<body>
<div id = "example"></div>
</body>
</html>
<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="build/browser.min.js"></script>
<script type="text/babel"> var style = { color: "red",handleChange: function (event) { this.setState({name: event.target.value}); },render: function(){ if(this.state.name == "123"){ return <div>123</div> } return( <div> <HelloWorld name = {this.state.name}></HelloWorld> <br/> <input type = "text" onChange = {this.handleChange} /> </div> ); } }); ReactDOM.render(<div style = {style}><HelloUniverse></HelloUniverse></div>,document.querySelector("#example")); </script>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |