为什么在setTimeout中调用setState函数时,它没有被绑定?
我在下面添加了一个Codepen,我已经在JavaScript中尝试过相同的代码,它可以正常工作。
<html>
<head>
<title></title>
<meta charset="UTF-8" />
</head>
<body>
<div id="root"></div>
<script src="https://unpkg.com/react@16.3.1/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.3.1/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script>
<script type="text/babel">
const state = {
eventCount: 0,
}
function setState(newState) {
Object.assign(state, newState);
render();
}
setTimeout(
function() {
this.setState({eventCount: 666});
}
.bind(this),
1000
);
function App() {
return (
<div>
<p>
There have been {state.eventCount} events.
</p>
</div>
)
}
function render() {
ReactDOM.render(<App/>, document.getElementById('root'));
}
render();
</script>
</body>
</html>
https://codepen.io/anon/pen/gZgQWX?editors=1011 (React 示例) https://codepen.io/anon/pen/oJZerP?editors=1111 (JavaScript 示例)