文章目录

  • React学习:ref调用、组件封装调用-学习笔记
    • ref调用-string形式
    • ref调用-回调形式(官方推荐)
    • ref调用-父调子
    • 组件封装调用demo(全选)
    • demo1(单组件)
    • demo2(重构-多组件)

React学习:ref调用、组件封装调用-学习笔记

ref调用-string形式

<!DOCTYPE html>
<html><head><title>ref</title><meta charset="UTF-8" /><script src="js/react.development.js"></script><script src="js/react-dom.development.js"></script><script src="js/babel.min.js"></script></head><body><div id="example"></div><!--ref一共有两种使用方式回调函数形式(官方推荐)  可以挂到组件上也可以是dom元素上string形式--><script type="text/babel">class TabList extends React.Component{handleClick(){this.refs.myInput.focus();this.refs.myInput.style.background='yellow';}render () {return(<div><input type="text" ref="myInput"/><button onClick={()=>this.handleClick()}>click</button></div>)}};ReactDOM.render(<TabList />,document.getElementById('example'));</script></body>
</html>

ref调用-回调形式(官方推荐)

<!DOCTYPE html>
<html><head><title>ref</title><meta charset="UTF-8" /><script src="js/react.development.js"></script><script src="js/react-dom.development.js"></script><script src="js/babel.min.js"></script></head><body><div id="example"></div><!--ref一共有两种使用方式回调函数形式(官方推荐)  可以挂到组件上也可以是dom元素上string形式--><script type="text/babel">class MyBtn extends React.Component{render(){return <button ref={(dom)=>{this.props.scope.mybtn = dom}}>btn</button>}}class TabList extends React.Component{handleClick(){this.myInput.focus();this.myInput.style.background='yellow';this.mybtn.innerText = '子组件'}render () {return(<div><input type="text" ref={(dom)=>{this.myInput = dom}}/><button onClick={()=>this.handleClick()}>click</button><MyBtn  scope={this}/></div>)}};ReactDOM.render(<TabList />,document.getElementById('example'));</script></body>
</html>

ref调用-父调子

<!DOCTYPE html>
<html><head><title>ref</title><meta charset="UTF-8" /><script src="js/react.development.js"></script><script src="js/react-dom.development.js"></script><script src="js/babel.min.js"></script></head><body><div id="example"></div><script type="text/babel">class Son extends React.Component {constructor(props) {super();this.state = {name:'我是子组件',}; }handleChange(){// this.setState({//   name:'子组件修改了'// })console.log(12345);}render() {return (<div><h1>子组件-----{this.state.name}</h1></div>)}};class Parent extends React.Component{handleClick(){this.myInput.value = this.mySon.state.name;this.mySon.handleChange();}render () {return(<div><h1>父组件</h1><input type="text" ref={(input)=>{this.myInput = input}}/><button onClick={()=>this.handleClick()}>获取子组件的值</button><Son  ref={(dom)=>{this.mySon = dom}}/></div>)}};ReactDOM.render(<Parent />,document.getElementById('example'));</script></body>
</html>

组件封装调用demo(全选)

demo1(单组件)

<!DOCTYPE html>
<html><head><title>全选</title><meta charset="UTF-8" /><script src="js/react.development.js"></script><script src="js/react-dom.development.js"></script><script src="js/babel.min.js"></script></head><body><div id="example"></div><script type="text/babel">class CheckAll extends React.Component{constructor(){super()this.state = {checkAll:false, //全选的状态items:[{name:'红色',check:true},{name:'黄色',check:false},{name:'绿色',check:false},{name:'蓝色',check:true}]}}handleCheckAll(){ //全选let {checkAll,items} = this.state;items.map((item,i)=>{return item.check = !checkAll;})this.setState({checkAll:!checkAll,  //取全选当前反的状态items:items})}handleCheckItem(item){ //当前的选项let {checkAll,items} = this.state;items.map((v,i)=>{if(item.name==v.name){return v.check = !item.check;}})var _checkAll = items.every(function(v,i){return v.check})this.setState({checkAll:_checkAll,  //取全选当前反的状态items:items})}render(){let {checkAll,items} = this.state;return(<div><input type="checkbox" checked={checkAll} onChange={()=>this.handleCheckAll()}</div><div>{items.map((item,i)=>{return (<div key={i}><input type="checkbox" checked={item.check} onChange={()=>this.handleCheckItem(item)} />{item.name}</div>)})}</div>)}};ReactDOM.render(<CheckAll />,document.getElementById('example'));</script></body>
</html><!-- var arr = [1,2,3,4,5];var a = arr.every(function(item,index){return item >1
}) -->

demo2(重构-多组件)

<!DOCTYPE html>
<html><head><title>全选</title><meta charset="UTF-8" /><script src="js/react.development.js"></script><script src="js/react-dom.development.js"></script><script src="js/babel.min.js"></script></head><body><div id="example"></div><script type="text/babel">class CheckALL extends React.Component{constructor(){super()this.state={checkAll:false, //全选的状态items:[{name:'红色',check:true},{name:'黄色',check:false},{name:'绿色',check:false},{name:'蓝色',check:true}]}}handleCheckAll(){  //全选let {checkAll,items} = this.state;items.map((item,i)=>{return item.check = !checkAll;})this.setState({checkAll:!checkAll,  //取全选当前反的状态items:items})}handleCheckItem(item){  //当前的选项   item  子传的值 == {name:name,check:!check}console.log(item);let {name,check } = item;let {checkAll,items} = this.state;items.map((v,i)=>{if(v.name==name){return v.check = check;}})var _checkAll = items.every(function(v,i){return v.check})this.setState({checkAll:_checkAll,  //取全选当前反的状态items:items})}render () {let {checkAll,items} = this.state;return(<div><div><input type="checkbox" checked={checkAll} onChange={()=>this.handleCheckAll()} />全选</div>{items.map((item,i)=>{return <CheckItem {...item} key={i} handleCheckItem={this.handleCheckItem.bind(this)}/>})}</div>)}};class CheckItem extends React.Component{constructor(props){super()this.state={name:props.name,check:props.check}}//props发生变化时触发//nextProps ==== newValue,prevProps====oldValuecomponentWillReceiveProps(nextProps,prevProps){  //  nextProps父中改变新的值,prevProps原有的//console.log(nextProps,prevProps)if(nextProps.check != prevProps.check){this.setState({check:nextProps.check})}}handleCheck(){let {name,check} = this.state;this.setState({check:!check});this.props.handleCheckItem({name:name,check:!check})}render () {//let {name,check} = this.props;   //父的值发生了变化,二种处理方式,一:添加componentWillReceiveProps  二,直接从父中取值let {name,check} = this.state;return(<div><input type="checkbox" checked={check} onChange={()=>this.handleCheck()} />{name}</div>)}};ReactDOM.render(<CheckALL />,document.getElementById('example'));</script></body>
</html>

React学习:ref调用、组件封装调用-学习笔记相关推荐

  1. react如何在父组件中调用子组件事件

    父组件是如何使用子组件的事件的,下边数值累加的例子 类组件 将子组件的this传到父组件,给父组件添加一个属性,值为this,之后就可以通过父组件的属性调用子组件的事件了 import React,{ ...

  2. 基于使用学习排序算法的Web服务学习的个性化的决策战略

    摘要----为了从类似的服务列表中进行功能上的选择,用户往往需要根据多个QoS准则做出他们的决定,它们需要对目标服务.在这个过程中,不同的用户可能遵循不同的决策策略,有些是补偿性的,在这个补偿中在所有 ...

  3. react组件卸载调用的方法_好程序员web前端培训分享React学习笔记(三)

    好程序员web前端培训分享React学习笔记(三),组件的生命周期 React中组件也有生命周期,也就是说也有很多钩子函数供我们使用, 组件的生命周期,我们会分为四个阶段,初始化.运行中.销毁.错误处 ...

  4. Vue学习(组件的定义及调用、路由)-学习笔记

    文章目录 Vue学习(组件的定义及调用.路由)-学习笔记 Vue学习(组件的定义及调用.路由)-学习笔记 可见代码参考学习:https://gitee.com/monkeyhlj/vue-learni ...

  5. react 调用组件方法_React源码分析1 — 组件和对象的创建(createClass,createElement)...

    1 组件的创建 学习了半年前端了,感觉前端的水确实也很深.做安卓的时候就对React-Native比较感兴趣,开发H5时也使用了一段时间的ReactJS.所以决定好好分析下它的源码.文章中有不对的地方 ...

  6. Vue学习小案例--分页组件封装

    文章目录 Vue学习小案例--分页组件封装 修改成Vue(使用组件) Vue学习小案例–分页组件封装 index.html <!DOCTYPE html> <html lang=&q ...

  7. 调用http_【学习充电】直观讲解一下 RPC 调用和 HTTP 调用的区别!

    很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...

  8. Dubbo学习记录(十六)--服务调用【二】 - Invoker的调用、ProxyFactory、Protocol、Filter,Exchanger, Transporter扩展点

    服务调用的前置学习[二] 服务调用涉及到的东西比较多, 需要一个个的理解透彻, 最终才能串起来: 服务端DubboInvoker的包装 DubboInvoker的生成是在服务导出的过程中创建的:由于D ...

  9. react组件卸载调用的方法_React调用子组件方法与命令式编程误区

    本文将阐述以下内容: 调用DOM元素方法 调用React子组件方法的两种直接方案 自省组件结构设计是否合理 -- 探讨声明式编程与命令式编程在React开发中的问题 调用React子组件方法的最佳方案 ...

最新文章

  1. Matlab与线性代数 -- 矩阵的转置
  2. Python之旅.第九章.并发编程..
  3. Android 添加菜单项
  4. MATLAB实现图像镜像变换的源代码
  5. Python中字典对象实现原理
  6. intellij修改编辑器中的注释部分的颜色
  7. 如何在CRM WebClient UI里使用HANA Live Report
  8. android无感刷新下拉分页,GitHub - TakWolf/Android-RefreshAndLoadMore-Demo: 一种简单的并且优雅的方式实现下拉刷新和加载更多的分页效果。...
  9. 信息学奥赛一本通C++语言——1093:计算多项式的值
  10. Python模拟登录实战,采集整站表格数据
  11. 一位Oracle顶流铁粉的“躬身入局”
  12. Tensorflow安装错误ERROR: Cannot uninstall ‘wrapt‘.
  13. unity 2017 代码加密
  14. 计算机无法检测更新失败怎么办,Win10电脑更新失败提示你的设备中缺少重要的安全和质量修复如何解决...
  15. 352.将数据流变成多个不相交间隔
  16. c语言程序设计第4版pdf荣政_C语言程序设计 PDF 第4版
  17. 计算机硬盘常用分区工具,三款好用的磁盘分区工具推荐
  18. zip压缩大于4g文件linux,linux下解压大于4G文件提示error: Zip file too big错误的解决办法...
  19. CDO玩“跨界”,数据驱动有戏了!
  20. 海康威视 0day_清华紫光原厂3D TLC颗粒初体验,海康威视C2000 PRO 2TB版体验

热门文章

  1. shell脚本命令set
  2. Vue_异步加载_vue-resource(不再维护)
  3. 深入理解函数式编程之柯里化
  4. 计算机秋招必备!上海互联网大厂企业整理清单!
  5. 【测试点分析】1060 爱丁顿数 (25分)_21行代码
  6. 26行代码AC_试题 历届试题 日期问题 | 第八届蓝桥杯B组第七题
  7. InnoDB和MyISAM有哪些不同
  8. 华硕计算机用户名默认,华硕路由器后台默认网址是多少
  9. 点击打印出现IE已经阻止此站点用不安全方式使用 ActiveX 控件解决方
  10. python 线程池_Python线程池及其原理和使用(超级详细)