以下是我的代码,其中我尝试每隔1秒打印一次日期和时间,但是我得到了输出2
。让我知道我在这里做错了,为什么每次都会输出2-
代码- App.js 文件
import React from 'react';
import './App.css';
function Elem() {
return <p>{new Date().toISOString()}</p>
}
const TimeElem = () => {
return setInterval(Elem, 1000)
}
const App = () => {
return (
<div className="App">
<h3>Hello World</h3>
<TimeElem />
</div>
)
}
export default App;
代码- index.js 文件
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render(<App />, document.getElementById('root'))
registerServiceWorker();
答案 0 :(得分:3)
之所以输出2
是因为setInterval(Elem, 1000)
将返回间隔ID
,该间隔在调用clearInterval(<ID>)
时使用。
考虑到这一点,以下是基于您的代码的有效代码段:
class App extends React.Component {
state = {
interval: null,
time: null
}
componentDidMount() {
this.setState({ interval: setInterval(this.setTime, 1000) })
}
componentWillUnmount() {
clearInterval(this.state.interval)
}
setTime = () => {
this.setState({
time: new Date().toISOString()
})
}
render() {
return (
<div>{this.state.time}</div>
);
}
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id='root' />
答案 1 :(得分:1)
您应该执行以下操作:
class App extends Component {
state = {
timer: ''
}
componentDidMount() {
setInterval(this.timer, 1000);
}
timer = () => {
this.setState({
timer: new Date().toISOString()
})
}
render() {
return (
<div className="App">
<h3>Hello World</h3>
<span>{this.state.timer}</span>
</div>
);
}
};
答案 2 :(得分:1)
您只得到setInterval
函数的结果,而不是Elem
的结果,而setInterval
的结果是可以用clearInterval
停止的间隔的ID功能。