我正在尝试在React中创建一个Word Clock ...然而,尽管我发送了一个新的道具,但我的子组件并没有重新渲染 . 为了显示正确的时间我需要刷新页面...我读到了组件生命周期,我认为我做得对,但似乎没有 . 我的猜测是,当我在父组件中渲染时,它只渲染一次并且不重新渲染,即使我每秒都通过setState()不断更新它的状态并更新时间......这是代码:不工作的演示,只是app.js文件我正在使用Facebook的Create-react-app
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
1 回答
如果您可以在代码中提供一些文档来解释代码应该做什么,那将会有所帮助 .
也就是说,这里有一些提示让你朝着正确的方向前进:
在
<Text>
中,您有componentWillReceiveProps(nextProps)
函数,该函数调用highlight()
.highlight
函数根据props改变状态 . 但是:此时道具仍然具有 old 值(因为你在componentWillReceiveProps()
内 . 要解决,你可以传递nextProps
来突出显示 . 但是,我建议完全从Text组件中删除状态 .你的
<Text>
组件有状态,但它不需要它:组件的所有不同变体都由props决定 . 因此,将逻辑转换为渲染函数内渲染的内容会更简单 . 然后,文本组件中唯一的生命周期方法是render()
. 状态实际上是用于组件本身在组件生命周期中更改的值(例如,文本字段中的用户输入) .在你的时钟中,在
getInitialState()
中你只返回一个showValue
. 稍后在您的代码中,您还包括hours
,minutes
,seconds
到州 . 最好在getInitialState()
中包含一些初始值的所有内容,因此您的代码的读者将知道您在此组件的状态下管理的内容 .希望这能帮助你朝着正确的方向前进..
更新:作为一个起点,你可以找到一个简化的working codepen here,只有时钟组件 . 它有状态(当前时间),只需每秒渲染一次 . 希望你可以从那里开始添加代码 .