html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.home {
margin: 100px auto;
width: 500px;
background-color: rgb(148, 92, 19);
}
.test {
background-color: red;
}
img {
width: 200px;
height: 120px;
}
style>
head>
<body>
<div class="home">
<div class="test">div>
div>
<script type="text/javascript" src="react.development.js">script>
<script type="text/javascript" src="react-dom.development.js">script>
<script type="text/javascript" src="babel.min.js">script>
<script type="text/babel">
class Hellow extends React.Component {
constructor(props) {
super(props)
this.state = { ele: 'bb' }
}
getEle = (e) => {
console.log(e);
// this.setState({ ele: 'f' });
// console.log(this.state.ele);
}
render() {
return (
<div ref={this.getEle}>
<h3>nice dayh3>
<img src="one.jpg" alt="">img><br>br>
<button onClick={this.addPicture}>add photobutton>
div>
)
}
addPicture = () => {
this.setState({ ele: 'e' });
console.log(this.state.ele);
}
}
ReactDOM.render(<Hellow />, document.querySelector('.test'))
script>
body>
html>
setState是一个异步函数,类似于接口请求,它的第二个参数是一个回调函数,如果你需要在更新state之后做一些操作,在这个回调函数中就可以获取到最新的state值
this.setState({ ele: 'e' }, (state) => {
console.log(this.state.ele)
});
这个setState的机制导致它有点像异步,所以第一次setState的时候值其实还没改完,就已经console了。你可以用个setTimeout把这个setState跟console这两句语句包起来,就正常了会有你要的效果。至于细节,我觉得这个文章说的很详细,讲述它这一机制
https://m.jb51.net/article/252671.htm