第一个输入框点击按钮alert数据,第二个输入框失焦alert数据
来吧展现javascript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 准备好容器 -->
<div id="test"></div>
<!-- 引入依赖 ,引入的时候,必须就按照这个步骤-->
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<!--这里使用了babel用来解析jsx语法-->
<script type="text/babel"> class Demo extends React.Component{ // 展现左侧输入框的数据 showData=()=>{ // const input1 = document.getElementById('input1') const {input1} = this.refs alert(input1.value) } // 展现右侧输入框的数据 showData2=()=>{ const {input2} = this.refs alert(input2.value) } render(){ return ( <div id="test"> <input id="input1" ref="input1" type="text" placeholder="点击提示数据"/> <button ref="btn1" onClick={this.showData}>点我啊</button> <input ref="input2" onBlur={this.showData2} type="text" placeholder="失焦提示数据"/> </div> ) } } ReactDOM.render(<Demo/>,document.getElementById('test')) </script>
</body>
</html>
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 准备好容器 -->
<div id="test"></div>
<!-- 引入依赖 ,引入的时候,必须就按照这个步骤-->
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<!--这里使用了babel用来解析jsx语法-->
<script type="text/babel"> class Demo extends React.Component{ // 展现左侧输入框的数据 showData=()=>{ const {input1} = this alert(input1.value) } // 展现右侧输入框的数据 showData2=()=>{ const {input2} = this alert(input2.value) } render(){ return ( <div id="test"> <input ref={c=>this.input1 = c} type="text" placeholder="点击提示数据"/> <button ref="btn1" onClick={this.showData}>点我啊</button> <input ref={c=>this.input2 = c} onBlur={this.showData2} type="text" placeholder="失焦提示数据"/> </div> ) } } ReactDOM.render(<Demo/>,document.getElementById('test')) </script>
</body>
</html>
复制代码
然鹅官方文档说了,当状态更新的时候回调函数会执行两次,第一次返回null 第二次才返回DOM元素。为啥呢?为了清空状态确保返回的DOM元素是最新的。好的来验证一下吧html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 准备好容器 -->
<div id="test"></div>
<!-- 引入依赖 ,引入的时候,必须就按照这个步骤-->
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<!--这里使用了babel用来解析jsx语法-->
<script type="text/babel"> class Demo extends React.Component{ state={ isHot:true } // 展现左侧输入框的数据 showData=()=>{ const {input1} = this alert(input1.value) } // 展现右侧输入框的数据 showData2=()=>{ const {input2} = this alert(input2.value) } changeWeather=()=>{ const {isHot} = this.state this.setState({isHot:!isHot}) } render(){ const {isHot} = this.state return ( <div id="test"> <h1>今每天气{isHot?'好热啊卧槽':'好凉快苏服'}</h1> <input ref={(c=>{console.log('@',c);this.input = c}) } type="text" placeholder="点击提示数据"/> <button ref="btn1" onClick={this.showData}>点我啊</button> <button ref="btn2" onClick={this.changeWeather}>点我切换天气</button> <input ref={c=>this.input2 = c} onBlur={this.showData2} type="text" placeholder="失焦提示数据"/> </div> ) } } ReactDOM.render(<Demo/>,document.getElementById('test')) </script>
</body>
</html>
复制代码
好的看文档java
直接上绝活react
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 准备好容器 -->
<div id="test"></div>
<!-- 引入依赖 ,引入的时候,必须就按照这个步骤-->
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<!--这里使用了babel用来解析jsx语法-->
<script type="text/babel"> class Demo extends React.Component{ state={ isHot:true } // 展现左侧输入框的数据 showData=(c)=>{ // const {input1} = this // alert(input1.value) } // 展现右侧输入框的数据 showData2=()=>{ const {input2} = this alert(input2.value) } changeWeather=()=>{ const {isHot} = this.state this.setState({isHot:!isHot}) } changeInput=(c)=>{ console.log("@",c) } render(){ const {isHot} = this.state return ( <div id="test"> <h1>今每天气{isHot?'好热啊卧槽':'好凉快苏服'}</h1> {/*解决刷新state ref执行两次的*/} <input ref={this.changeInput} type="text" placeholder="点击提示数据"/> <button ref="btn1" onClick={this.showData}>点我啊</button> <button ref="btn2" onClick={this.changeWeather}>点我切换天气</button> <input ref={c=>this.input2 = c} onBlur={this.showData2} type="text" placeholder="失焦提示数据"/> </div> ) } } ReactDOM.render(<Demo/>,document.getElementById('test')) </script>
</body>
</html>
复制代码
害 虽然执行了两次但也不影响使用babel
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 准备好容器 -->
<div id="test"></div>
<!-- 引入依赖 ,引入的时候,必须就按照这个步骤-->
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<!--这里使用了babel用来解析jsx语法-->
<script type="text/babel"> class Demo extends React.Component{ // React.createRef调用后会返回一个容器,该容器能够存储ref所标识的节点,该容器是"专人专用" myRef = React.createRef() myRef2 = React.createRef() // 展现左侧输入框的数据 showData=(c)=>{ alert(this.myRef.current.value) } showData2=(c)=>{ alert(this.myRef2.current.value) } render(){ return ( <div id="test"> <input ref={this.myRef} type="text" placeholder="点击提示数据"/> <button onClick={this.showData}>点我啊</button> <input ref={this.myRef2} onBlur={this.showData2} type="text" placeholder="失焦提示数据"/> </div> ) } } ReactDOM.render(<Demo/>,document.getElementById('test')) </script>
</body>
</html>
复制代码
须要绑定几个ref就要生成几个,有点** 可是官方比较推荐这种markdown