handleClick(){
alert("OK");
}
<button onClick={this.handleClick} className="btn btn-outline-success">handleClick的function</button><hr />
handleClick = () => {
alert("OK" + this);
console.log(this);
}
handleClick = () => {
// 方法1.
// this.state.count += 1; //+1
// this.setState({}); //网页跑完後,变更内容同时变更显示
// 方法2.
// var newState = {...this.state}; //... = 旧的
// newState.count+=1;
// this.setState(newState);
// 方法3.
// this.setState({
// count : ++this.state.count //先+1 容易出错,少用
// });
// 方法4.
this.setState({
count : this.state.count +1
});
会发现只有个别元件再变化
方法1.
//让 handleClick3 拿取资料
handleClick2 = () => {
alert("OK" + this);
console.log(this);
this.setState({
count : this.state.count +1
});
}
//抓handleClick2并只让id:1改变
handleClick3 = (id) => {
this.handleClick2({id:1});
console.log(id);
}
<button
// 让id:1传进来 console.log检查
onClick={ () => {this.handleClick3(1)}}
className="btn btn-outline-success"
>按我
</button><hr />
<button
// 让id:2传进来 console.log检查
onClick={ () => {this.handleClick3(2)}}
className="btn btn-outline-success"
>按我按我
</button><hr />
方法2.
// 合并 (handleClick2 + handleClick3)
handleClick4 = (myCount) => {
var newState = {...this.state}; //... = 旧的
myCount++;
newState.count = myCount;
this.setState(newState);
alert("handleClick4++")
}
<button
onClick={ () => {this.handleClick4(this.state.count)}}
className="btn btn-outline-success"
>按我按我按我
</button><hr />
(5-1)Lab_counters > counter-app > index.js
import Counter from './components/counter.jsx'; //引用有物件的.js 需from
import Counters from './components/counters.jsx'; //引用有物件的.js 需from
ReactDOM.render(
<React.StrictMode>
<Counter />
<Counters /> //新增
<button className="btn btn-outline-success">index.js内的</button>
</React.StrictMode>,
document.getElementById('root')
);
(5-2)Lab_counters > counter-app > src > components > counters.jsx 新增物件
import React, { Component } from 'react'; //引用react
import Counter from './counter.jsx'; //引用counter.jsx
class Counters extends Component { //制作Counters
state = { }
render() {
return (
<div>
<Counter />
<Counter />
<Counter />
</div>
);
}
}
export default Counters;
(5-3)http://localhost:3000/
每个元件分开互动,不受影响
Lab_counters > counter-app > src > components > counters.jsx
class Counters extends Component { //制作Counters
state = {
counters:[
{id:1,value:1},
{id:2,value:2},
{id:3,value:3},
{id:4,value:4}
]
}
render() {
return (
<div>
{/* state.counters 有4个用map方法,跑4次 */}
{this.state.counters.map(c => <Counter key={c.id} />)}
{/* 跑1次 */}
<Counter />
</div>
);
}
(7-1)Lab_counters > counter-app > src > components > counters.jsx
class Counters extends Component { //制作Counters
state = {
counters:[
{id:1,value:1},
{id:2,value:2},
{id:3,value:3},
{id:4,value:4}
]
}
render() {
return (
<div>
{/* 此处value 更改counter.jsx内Counter元素value */}
{this.state.counters.map(c => <Counter key={c.id} value={c.value} />)}
(7-2)Lab_counters > counter-app > src > components > counter.jsx
class Counter extends Component {
state = {
count: this.props.value //由counters.jsx的counters元件[]更改value
}
(8-1)Lab_counters > counter-app > src > components > counters.jsx
state = {
counters:[
{id:1,value:1},
{id:2,value:2},
{id:3,value:3},
{id:4,value:8},
{id:5,value:8},
]
}
// state.counters.value++
getTotal(){
var total = 0;
for(let i = 0; i<this.state.counters.length;i++){
total += this.state.counters[i].value;
}
return total
}
// 任何id++影响getTotal() ++
doIncrement = (id) => {
alert("ok");
for(let i = 0; i < this.state.counters.length;i++){
if(this.state.counters[i].id == id){
this.state.counters[i].value +=1 ;
break;
}
}
this.setState({});
console.log(id);
}
render() {
return (
<div>
{/* 1.state.counters 有4个用map方法,跑4次 */}
{/* {this.state.counters.map(c => <Counter key={c.id} />)} */}
{/* 2.此处value 更改counter.jsx内Counter元素value */}
{/* {this.state.counters.map(c => <Counter key={c.id} value={c.value} />)} */}
{/* 跑1次 */}
<Counter />
{/* state.counters.value++ */}
<h1>Total:{this.getTotal()}</h1><hr />
{/* 新增onIncrement、id 由 counter.jsx的render接收*/}
{this.state.counters.map(c => <Counter key={c.id} value={c.value} onIncrement={this.doIncrement} id={c.id}/>)}<hr />
</div>
);
}
}
(8-2)Lab_counters > counter-app > src > components > counter.jsx
{/* 此处接收counters.jsx 的 onIncrement={this.doIncrement} id={c.id} */}
{/* 找到指定的编号,作用 */}
{/* 前面按钮会无作用,因为没有抓到id */}
<button
onClick={ () => { this.props.onIncrement(this.props.id) }}
className="btn btn-outline-success"
>我是Total会变化的按钮
</button><hr />
+77笔记counter-6-所有资料全参考父阶.jsx
<<: CLOUDWAYS虚拟主机限时首二月7折优惠码,只到2021/9/5
>>: [教学] 如何架设狗狗币全节点 (更新 1.14.4 系统)
Youtube连结:https://bit.ly/3inN3zI 红黑树的新增观念,涵盖「旋转」与...
当女朋友说想要你手作的礼物,但比起动手做,你更想写程序给女友工程师的浪漫, 这时候Python的Tu...
前言 昨天讲完了 manage.py 跟我们新加入的几个自订指令,今天我们还是离不开 manage....
我在第2天的时候说了如何做自己的开发板,今天来说最小系统板的规划吧,会做开发板後做最小系统板只需要好...
今天一开始 先来新增spring boot的连线设定 Spring Boot的设定档 applica...