当前位置: 首页 > news >正文

网站建设手机网络优化工程师为什么都说坑人

网站建设手机,网络优化工程师为什么都说坑人,网站建设制作定制,wordpress移动端插件一、React组件 函数组件 // 函数组件 // 组件的名称必须首字母大写 // 函数组件必须有返回值 如果不需要渲染任何内容&#xff0c;则返回 null function HelloFn () {return <div>这是我的第一个函数组件!</div> }// 定义类组件 function App () {return (<di…

一、React组件

函数组件

// 函数组件
// 组件的名称必须首字母大写
// 函数组件必须有返回值 如果不需要渲染任何内容,则返回 null
function HelloFn () {return <div>这是我的第一个函数组件!</div>
}// 定义类组件
function App () {return (<div className="App">{/* 渲染函数组件 */}<HelloFn /><HelloFn></HelloFn></div>)
}
export default App

类组件

// 引入React
import React from 'react'// 类组件
// 使用 ES6 的 class 创建的组件,叫做类(class)组件
// 类名称也必须以大写字母开头
// 类组件应该继承 React.Component 父类,从而使用父类中提供的方法或属性
// 类组件必须提供 render 方法render 方法必须有返回值,表示该组件的 UI 结构
class HelloC extends React.Component {render () {return <div>这是我的第一个类组件!</div>}
}function App () {return (<div className="App">{/* 渲染类组件 */}<HelloC /><HelloC></HelloC></div>)
}
export default App

二、组件的事件绑定

// 类组件引入React
import React from 'react'// 函数组件
// react事件采用驼峰命名法
function Hello() {const clickHandler = (e) => { // 获取事件对象e只需要在 事件的回调函数中 补充一个形参e即可拿到console.log(e, 66666)}return <div onClick={clickHandler}>hello</div>
}// 类组件
class HelloComponent extends React.Component{// 事件回调函数 (标准写法 可以避免this指向问题) !!!!!!// 回调函数中的this指向是当前的组件实例对象clickHandler = () => {// 这里的this指向的是正确的当前的组件实例对象   推荐这么写!!!!!!console.log(this)}clickHandler1 () {// 这里的this 不指向当前的组件实例对象而指向undefined 存在this丢失问题console.log(this)}render () {return <div onClick={this.clickHandler} style={{fontSize: '30px',color: 'red'}}>这是我第一个类组件</div>}
}function App () {return (<div className="App"><Hello/><Hello></Hello><HelloComponent/><HelloComponent></HelloComponent></div>)
}export default App

三、组件事件传参

// 类组件引入React
import React from 'react'// 函数组件
// 传递自定义参数
function Hello() {const clickHandler = (e, msg) => {// e.preventDefault() // 阻止事件的默认行为console.log(66666, e, msg)}return (<div onClick={(e) => clickHandler(e, 'mua我爱你')}>{/* <a href='https://www.baidu.com'>百度</a> */}这是函数组件</div>)
}// 类组件
class HelloComponent extends React.Component{// 事件回调函数 (标准写法 可以避免this指向问题)// 回调函数中的this指向是当前的组件实例对象clickHandler = (e, num) => {console.log(this, e, num)}render () {return (<><button onClick={(e) => this.clickHandler(e, '123')}>click me</button>{/* <div onClick={this.clickHandler} style={{fontSize: '30px',color: 'red'}}>这是我第一个类组件</div> */}</>)}
}function App () {return (<div className="App"><Hello/><Hello></Hello><HelloComponent/><HelloComponent></HelloComponent></div>)
}export default App// event 是React封装的, 可以看到  __proto__.constructor是SyntheticEvent, 模拟出来DOm事件所有能力
// event.nativeEvent是原生事件对象, 原生的打印出来是MouseEvent
// 和dom事件不一样,和vue也不一样
// React16绑定到document, React17事件绑定到root组件(有利于多个React版本并存,例如微前端)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四、组件状态

在React hook出来之前,函数式组件是没有自己的状态的,所以我们统一通过类组件来讲解

不要直接修改state中的值,必须通过setState方法进行修改

// 类组件引入React
import React from 'react'// 组件状态
// 不要直接修改state中的值,必须通过setState方法进行修改 
class TestComponent extends React.Component{// 定义组件状态state = {name: 'zm',count: 0}setCount = () => {this.setState({count: this.state.count + 1,name: 'zzzz'})}render () {// 使用状态return (<div>this is TestComponent, name为: {this.state.name}, count: {this.state.count}<button onClick={this.setCount}>click++</button></div>)}
}function App () {return (<div className="App"><TestComponent/></div>)
}export default App

五、this指向问题

在这里插入图片描述

// 类组件引入React
import React from 'react'// 类组件 this有问题的写法// 1.constructor中通过bind强行绑定this// class HelloComponent extends React.Component{
//   constructor () {
//     super()
//     // 使用bind强行修改this指向
//     // 相当于在类组件初始化的阶段,就可以把回调函数的this修改到
//     // 永远指向当前组件的实例对象
//     this.clickHandler = this.clickHandler.bind(this)
//   }
//   clickHandler () {
//     console.log(this) // 如果没有上面的bind 打印就是undefined
//   }
//   render () {
//     return <div onClick={this.clickHandler} style={{fontSize: '30px',color: 'red'}}>这是我第一个类组件</div>
//   }
// }// 2.箭头函数写法// class HelloComponent extends React.Component{
//   clickHandler () {
//     console.log(this)
//   }
//   render () {
//     // render函数的this已经被react做了修改
//     // 这里的this就是指向当前组件实例
//     console.log('父函数中的this指向为:', this)
//     // 通过箭头函数的写法 直接沿用父函数的this指向也ok
//     return <div onClick={() => this.clickHandler()} style={{fontSize: '30px',color: 'red'}}>这是我第一个类组件</div>
//   }
// }// 3. class field写法  最推荐 !!!!!!!!!!!!!!!!!!!!!
class HelloComponent extends React.Component{clickHandler = () => {console.log(this)}render () {return <div onClick={this.clickHandler} style={{fontSize: '30px',color: 'red'}}>这是我第一个类组件</div>}
}function App () {return (<div className="App"><HelloComponent/></div>)
}export default App

六、受控表单组件

// 类组件引入React
import React from 'react'class InputComponent extends React.Component{state = {message: 'zm66666'}changeHandler = (e) => {this.setState({message: e.target.value})}render () {// 使用状态return (<div>{/* 绑定value 绑定事件 */}<input type='text' value={this.state.message} onChange={this.changeHandler} /></div>)}
}function App () {return (<div className="App"><InputComponent/></div>)
}export default App// 受控组件:input框自己的状态被React组件状态控制// 1. 在组件的state中声明一个组件的状态数据
// 2. 将状态数据设置为input标签元素的value属性的值
// 3. 为input添加change事件,在事件处理程序中,通过事件对象e获取到当前文本框的值(即用户当前输入的值)
// 4. 调用setState方法,将文本框的值作为state状态的最新值

七、非受控表单组件

// 类组件引入React createRef
import React, { createRef } from 'react'class InputComponent extends React.Component{// 使用createRef产生一个存放dom的对象容器msgRef = createRef()changeHandler = () => {console.log(this.msgRef.current)console.log(this.msgRef.current.value)}render () {// 使用状态return (<div>{/* ref绑定 获取真实dom */}<input ref={this.msgRef} /><button onClick={this.changeHandler}>click</button></div>)}
}function App () {return (<div className="App"><InputComponent/></div>)
}export default App// 非受控组件: 
// 通过手动操作dom的方式获取文本框的值
// 文本框的状态不受react组件的state中的状态控制
// 直接通过原生dom获取输入框的值// 1.导入createRef 函数
// 2.调用createRef函数,创建一个ref对象,存储到名为msgRef的实例属性中
// 3.为input添加ref属性,值为msgRef
// 4.在按钮的事件处理程序中,通过msgRef.current即可拿到input对应的dom元素,
// 而其中msgRef.current.value拿到的就是文本框的值

文章转载自:
http://doodlebug.rhmk.cn
http://sur.rhmk.cn
http://fibrescope.rhmk.cn
http://landmass.rhmk.cn
http://cheerioh.rhmk.cn
http://flutey.rhmk.cn
http://nogg.rhmk.cn
http://noxious.rhmk.cn
http://cycladic.rhmk.cn
http://cloudland.rhmk.cn
http://neighbor.rhmk.cn
http://worktable.rhmk.cn
http://collenchyma.rhmk.cn
http://maoriland.rhmk.cn
http://volkslied.rhmk.cn
http://handsaw.rhmk.cn
http://cytolysis.rhmk.cn
http://arvo.rhmk.cn
http://nonbelligerency.rhmk.cn
http://sparkler.rhmk.cn
http://sizzard.rhmk.cn
http://fipple.rhmk.cn
http://enarthroses.rhmk.cn
http://complicacy.rhmk.cn
http://unalterable.rhmk.cn
http://enepidermic.rhmk.cn
http://xat.rhmk.cn
http://iupap.rhmk.cn
http://razon.rhmk.cn
http://witen.rhmk.cn
http://macroprocessor.rhmk.cn
http://nerval.rhmk.cn
http://unladen.rhmk.cn
http://countship.rhmk.cn
http://eec.rhmk.cn
http://pool.rhmk.cn
http://roentgenology.rhmk.cn
http://childing.rhmk.cn
http://gillian.rhmk.cn
http://disgrace.rhmk.cn
http://infractor.rhmk.cn
http://haploidy.rhmk.cn
http://intradermic.rhmk.cn
http://subtenant.rhmk.cn
http://magnetise.rhmk.cn
http://paleophytology.rhmk.cn
http://ciceronian.rhmk.cn
http://volubile.rhmk.cn
http://precedable.rhmk.cn
http://disturb.rhmk.cn
http://electronarcosis.rhmk.cn
http://nitrosamine.rhmk.cn
http://damaged.rhmk.cn
http://polltaker.rhmk.cn
http://osa.rhmk.cn
http://counterpressure.rhmk.cn
http://bananalander.rhmk.cn
http://disazo.rhmk.cn
http://seek.rhmk.cn
http://unprinted.rhmk.cn
http://pantun.rhmk.cn
http://avocation.rhmk.cn
http://novercal.rhmk.cn
http://tribunician.rhmk.cn
http://propylaeum.rhmk.cn
http://oliver.rhmk.cn
http://marcia.rhmk.cn
http://housecarl.rhmk.cn
http://aunt.rhmk.cn
http://struma.rhmk.cn
http://dynamics.rhmk.cn
http://sleepwalking.rhmk.cn
http://episcopal.rhmk.cn
http://cosmopolitism.rhmk.cn
http://terrier.rhmk.cn
http://stifling.rhmk.cn
http://withhold.rhmk.cn
http://chestertonian.rhmk.cn
http://levallois.rhmk.cn
http://bangkok.rhmk.cn
http://exfoliation.rhmk.cn
http://oligochrome.rhmk.cn
http://medullin.rhmk.cn
http://heeled.rhmk.cn
http://tableland.rhmk.cn
http://shamefully.rhmk.cn
http://plus.rhmk.cn
http://quinquefid.rhmk.cn
http://unsettle.rhmk.cn
http://kneel.rhmk.cn
http://cytopenia.rhmk.cn
http://reparation.rhmk.cn
http://plumbicon.rhmk.cn
http://interbang.rhmk.cn
http://exhaustless.rhmk.cn
http://generalitat.rhmk.cn
http://overpot.rhmk.cn
http://unfamous.rhmk.cn
http://turboelectric.rhmk.cn
http://solate.rhmk.cn
http://www.15wanjia.com/news/60227.html

相关文章:

  • 建设个人网站流程网站建设制作免费
  • 甘肃网站建设百度seo关键词排名优化教程
  • 设计公司网站详情网站推广优化是什么意思
  • wordpress 一键生成山东seo
  • 网站错误代码 处理数字营销平台有哪些
  • 织梦网站模板安装教程靠谱的代写平台
  • 时尚类网站设计公司网络安全培训
  • 大黄网站.巨量算数官方入口
  • 学风网站建设西地那非片说明书
  • 深圳专业优定软件网站建设企业网站设计
  • 如何做视频网站技术网络营销方式包括哪些
  • 郑州动力无限网站建设创建网站免费注册
  • 网页版html编辑器网站功能优化
  • 物流网站怎么做推广东莞网站建设推广
  • 网站后台维护怎么做站长之家域名解析
  • 充电宝网站建设策划书百度知道首页
  • 苏州做学校网站的站长工具ip地址查询
  • 天津做网站制作公司seo推广什么意思
  • 网上做打字任务的网站百度反馈中心
  • 上海本地网站建设优化神马排名软件
  • 怎么把做的网站传小程序搭建教程
  • vs做网站头部的代码谷歌推广费用多少
  • 做微网站 主机 域名百度竞价优化排名
  • 沧州网站设计公司新浪体育最新消息
  • 现在还做自适应网站深圳谷歌推广公司
  • 重庆潼南网站建设价格seo网络推广经理
  • 网站建设比较好的多少钱促销活动推广方法有哪些
  • 网站建设 用英文怎么说网站搜索优化价格
  • 设计一款app网站seo需要用到哪些工具
  • 做公司+网站建设市场推广方案模板