标签:date let 表单元素 img 布尔值 index from class set
<button onClick={ this.start }>开始</button>
上面的写法,对应的函数中获取不到this指向
<button onClick={ this.start.bind(this) }>开始</button>
<button onClick={ ()=>this.stop() }>停止</button>
import React, { Component } from ‘react‘
export default class Clock extends Component {
state = {
nowtime : ‘‘,
timer:null//定时器编号
}
start(){
var timer = setInterval(()=>{
this.setState({nowtime:new Date().toLocaleTimeString()})
},1000)
this.setState({ timer })
}
stop(){
clearInterval(this.state.timer)
}
render() {
return (
<div>
<h1>当前时间:{ this.state.nowtime }</h1>
{/* es5方式绑定事件,对应的函数名称后不加小括号,如果加了小括号就会自动执行函数 */}
{/* es5方式绑定事件,对应的事件函数中默认获取不到this指向
如果需要获取到this指向,需要通过.bind(this)来绑定this指向 */}
{/* <button onClick={ this.start }>开始</button> */}
<button onClick={ this.start.bind(this) }>开始</button>
{/* es6方式绑定事件,对应的事件函数能够获取this指向 */}
<button onClick={ ()=>this.stop() }>停止</button>
</div>
)
}
}
<button onClick={ this.handle1.bind(this) }>事件对象-es5</button>
es5方式触发事件,如果在调用函数时没有传递参数,而函数中存在一个形参,那么这个形参就是事件对象
<button onClick={ (e)=>this.handle1(e) }>事件对象-es6</button>
es6方式触发事件,需要显式的传递参数,在对应的函数中才能够获取到事件对象
<button onClick={ this.handle2.bind(this,100,‘hello‘) }>es5-传递参数</button>
es5方式调用函数传递参数时,在函数中多出来的形参(最后一个形参)是事件对象
<button onClick={ (e)=>this.handle2(100,e,‘hello‘) }>es6-传递参数</button>
es6方式调用函数传递参数,传递的是什么内容,对应函数中形参接收到的就是什么
import React, { Component } from ‘react‘
export default class Login extends Component {
state = {
username:‘‘,
password:‘‘
}
iptChange(event,key){
var data = this.state;
//根据对象和键名来修改数据
data[key] = event.target.value;
//通过setState来修改状态机中的数据,并重新渲染页面
this.setState(data);
}
dologin(){
console.log(this.state)
}
render() {
return (
<div>
{/* 模拟vue的v-model双向绑定 */}
<h1>登录</h1>
<form>
<div>
<label>用户名:</label>
<input type="text" placeholder="请输入用户名"
value={ this.state.username } onChange={ (e)=>this.iptChange(e,‘username‘) }
autoComplete="off"
/>
</div>
<div>
<label>密码:</label>
<input type="password" placeholder="请输入密码"
value={ this.state.password } onChange={ e=>this.iptChange(e,‘password‘) }
/>
</div>
<div>
<button type="button" onClick={ ()=>this.dologin() }>登录</button>
</div>
</form>
</div>
)
}
}
父组件:自定义属性
import Child from ‘./Child‘
export default class Home extends Component {
state = { goodsarr:[] }
render() {
return (
<div>
{
this.state.goodsarr.map(item=>{
return(
<Child key={ item.id } info={ item }></Child>
)
})
}
</div>
)
}
}
子组件:props
import React, { Component } from ‘react‘
import ‘../assets/css/child.css‘
export default class Child extends Component {
render() {
return (
<div className="item">
<img src={ this.props.info.img } />
<p>名称:{ this.props.info.goodsname }</p>
<p>价格:{ this.props.info.price }</p>
</div>
)
}
}
父组件,传递数据的同时可以传递自定义事件
delgoods(id){
// console.log(‘父组件...‘,n)
//n 要删除的商品id
// var idx = this.state.goodsarr.findIndex(item=> item.id == id)
var idx = this.state.goodsarr.findIndex(item=> {
return item.id == id;
})
var data = this.state.goodsarr;
data.splice(idx,1);
this.setState({ goodsarr:data })
}
render() {
return (
<div>
{
this.state.goodsarr.map(item=>{
return(
<Child key={ item.id }
info={ item }
homedel={ (id)=>this.delgoods(id) }
></Child>
)
})
}
</div>
)
}
子组件:
vue中:通过$emit来触发父组件传递的事件并传递参数给父组件
react中:
function Child(props){
return(
<div>
<div className="item">
<img src={ props.info.img } />
<p>名称:{ props.info.goodsname }</p>
<p>价格:{ props.info.price }</p>
<button onClick={ ()=>props.homedel(props.info.id) }>删除</button>
</div>
</div>
)
}
export default Child;
(1)创建一个公用容器
/src/assets/js/bus.js
const EventEmitter = require(‘events‘) const MyEvent = new EventEmitter(); export default MyEvent;
(2)在/src/index.js引入公用的容器,并把它挂在到Component原型上
import React,{ Component } from ‘react‘
import ReactDOM from ‘react-dom‘
//引入根组件
import App from ‘./App‘
//引入公用容器
import bus from ‘./assets/js/bus‘
//把公用容器挂载到Component原型上
Component.prototype.bus = bus;
数据发送端:emit
/src/components/Home.js
sendData(){
this.bus.emit(‘0128‘,‘不是成功来的慢,而是放弃速度快‘);
}
数据接收端:on
/src/components/Clock.js
constructor(){
super()
this.bus.on(‘0128‘,(msg)=>{
this.setState({msg:msg})
})
}
state = {
nowtime : ‘‘,
timer:null,//定时器编号
msg:‘‘
}
只有类组件才有生命周期
constructor 构造函数
UNSAFE_componentWillMount 组件将要挂载
render 组件渲染
componentDidMount 组件挂载完成
UNSAFE_componentWillReceiveProps 子组件将要接收父组件传递过来的最新数据
shouldComponentUpdate 组件是否要更新数据,预期得到的是一个布尔值
true表示更新数据,false表示不更新数据
UNSFAE_componentWillUpdate 组件将要更新
render 组件渲染
componentDidUpdate 组件更新完成
componentWillUnmout
标签:date let 表单元素 img 布尔值 index from class set
原文地址:https://www.cnblogs.com/hxmw/p/14341560.html