React 中 通过 onXxx 属性指定事件处理函数(注意大小写),通过 event.target 得到发生事件的 DOM 元素对象
不要过度使用 ref (比如,元素获取自身属性时,通过 event 对象,而不是 ref)
原理:
为了更好的兼容性:React 使用的是自定义(合成)事件,而不是使用的原生 DOM 事件
为了的高效:React 中的事件是通过事件委托方式处理的(委托给组件最外层的元素)
code:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件处理</title>
</head>
<body>
<!-- 准备好一个"容器" -->
<div id="test"></div>
<!-- 引入react核心库 -->
<script type="text/javascript" src="../js/react.development.js"></script>
<!-- 引入react-dom,用于支持react操作DOM -->
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<!-- 引入babel,用于将jsx转为js -->
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
// 创建组件
class Demo extends React.Component {
// 创建ref容器
myRef = React.createRef()
myRef2 = React.createRef()
// 展示左侧输入框的数据
showData = (event) => {
console.log('left', event) // event 为 按钮
alert(this.myRef.current.value)
}
// 展示右侧输入框的数据
showData2 = (event) => {
console.log('right', event) // event 为 右侧 input
alert(event.target.value)
}
render() {
return (
<div> {/* 事件委托机制,React会把事件加在最外层元素,div 身上 */}
<input ref={this.myRef} type="text" placeholder="点击按钮提示数据" />
<button onClick={this.showData}>点我提示左侧的数据</button>
<input onBlur={this.showData2} type="text" placeholder="失去焦点提示数据" />
</div>
)
}
}
// 渲染组件到页面
ReactDOM.render(<Demo />, document.getElementById('test'))
</script>
</body>
</html>