javascript - 让 Clock 组件真正可重用和封装?在反应 JS 中?
问题描述
function Clock(props) {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {props.date.toLocaleTimeString()}.</h2>
</div>
);
}
function tick() {
ReactDOM.render(
<Clock date={new Date()} />,
document.getElementById('root')
);
}
setInterval(tick, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.0/umd/react-dom.production.min.js"></script>
<div id="root"></div>
问题:人们,请解释下面的代码,这里我们如何转移到第二个函数,比如{没有任何回调函数}?
解决方案
您可以通过setInterval
在组件中向上移动并使用它来更新其状态以使其重新渲染来实现这一点。
此外,reactDOM.render
应该只被调用一次。
工作示例:
class Clock extends React.Component{
state = { date: new Date() }
componentDidMount(){
setInterval(() => { this.setState({ date: new Date() })}, 1000);
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
ReactDOM.render(
<Clock />,
document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.0/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- php - Ajax 消息显示问题
- mongodb - MongoDB Realm:应用程序重启后 React Native 不保留登录/会话
- html - 如何放置带有 url 的背景图片?
- javascript - 有没有办法将 Firestore 查询转换为字符串?
- arrays - C - 将浮点数与数组进行比较以查看值是否在数组中
- database - oracle如何对子分区表进行碎片整理?
- c# - 尝试通过按下控制器按钮来激活 UNITY 中的动画触发器,在统一上显示多个错误,但在编译器上却没有
- python - 姜戈。如何获取 JOIN 查询和 GROUP BY 中的所有字段
- node.js - 如何为数组内的数组保存/更新/提取信息?
- python - 使用 PyTorch 从头开始的线性分类器问题