当前位置: 首页 > 知识库问答 >
问题:

如何在React中调用函数并根据一天中的时间更改标题文本和颜色?

连成益
2023-03-14

我正在尝试根据一天中的时间更改h1标题中的文本和颜色。
使用我的代码时,我得到了错误:“无法设置NULL的属性”inner text“。
我试图了解如何在呈现部分实现函数,但没有成功。
下面是我的代码:

js prettyprint-override">import React from "react";
import ReactDOM from "react-dom";

const morning = { color: "blue" };
const afternoon = { color: "green" };
const night = { color: "grey" };
const date = new Date();
const currentHour = date.getHours();

function sayHello() {
  const heading = document.querySelector("h1");
  if (currentHour < 12) {
    heading.innerText = "Good Morning!";
    heading.style.color = morning;
  } else if (currentHour > 12 && currentHour < 18) {
    heading.innerText = "Good Afternoon!";
    heading.style.color = afternoon;
  } else {
    heading.innerText = "Good Night!";
    heading.style.color = night;
  }
}

ReactDOM.render(
  <h1 className="heading">{sayHello()}</h1>,
  document.getElementById("root")
);

共有3个答案

陆俊捷
2023-03-14

你必须使用设置时间间隔也,它运行你的脚本像1分钟后或任何你想设置,然后你可以只检查时间和改变你的状态

元玮
2023-03-14

我将使用UseEffectUseEffect挂钩。

https://codesandbox.io/s/modern-Fog-qyjn9?file=/src/sayhello.js:82-117

import React, { useState, useEffect } from "react";

const morning = { color: "blue" };
const afternoon = { color: "green" };
const night = { color: "grey" };

const SayHello = () => {
  const [helloText, setHelloText] = useState("");
  const [helloTextColor, setHelloTextColor] = useState("");

  useEffect(() => {
    const date = new Date();
    const currentHour = date.getHours();
    if (currentHour < 12) {
      setHelloText("Good Morning!");
      setHelloTextColor(morning);
    } else if (currentHour > 12 && currentHour < 18) {
      setHelloText("Good Afternoon!");
      setHelloTextColor(afternoon);
    } else {
      setHelloText("Good Night!");
      setHelloTextColor(night);
    }
  }, []);
  return <div style={{ color: helloTextColor }}>{helloText}</div>;
};

export default SayHello;

松嘉颖
2023-03-14

这不是你用react的方式。您可能需要尝试如下操作:

import React from "react";
import ReactDOM from "react-dom";

function Hello() {
  const currentHour = new Date().getHours();
  
  const [color, greeting] = 
    currentHour < 12 ? ["blue", "Good Morning!"] : 
    currentHour > 12 && currentHour < 18 ? ["green", "Good Afternoon!"] :
    ["grey", "Good Night!"];


  return (
    <h1 style={{color}}>
      {greeting}
    </h1>
  )
}

ReactDOM.render(
  <Hello />,
  document.getElementById("root")
);
 类似资料:
  • 问题内容: 好的,我有两个要用作背景的不同背景.jpg,具体取决于一天中的什么时间。我想从早上7点到晚上8点有阳光背景,从晚上8点到早上7点有夜背景。 我正在处理远程html文件,并且将背景和图形与实际html文件存储在单独的服务器上。除了包含我分离并移至外部样式表的背景代码的主体部分以外,大多数css都位于html文件中。我制作了两个单独的样式表,一个带有白天的背景图像,一个带有夜景。这是夜间C

  • 如何更改以下首选项XML中和的颜色: 我尝试了我的: 更改标题的颜色,但它也会更改我工具栏中文本的颜色(我不想要)。 似乎正确地更改了摘要的颜色。 如何在不影响工具栏文本颜色的情况下更改标题颜色?

  • 问题内容: 我正在使用以下代码, 用于更改JFrame中的工具栏颜色。但这没有用。 是否可以在JFrame中更改标题栏的颜色? 问题答案: 这是不可能的。顶级JFrame由底层OS的外观控制。 您可以更改的颜色。

  • 我想根据用户需要将我写的文本(和字体颜色)更改为另一种颜色。 我制作了一个JFrame,并添加了JTextPane。在文本窗格的右侧,我有一个不同颜色的列表(“白色”、“黑色”、“绿色”等)。Jframe还有一个JMenuBar,如果用户突出显示列表中的一个元素(比如黑色),我想更改textpane的背景色(我知道这很愚蠢,但这是老师的作业) 问题是,文本是黑色的,所以当我改变背景颜色时,文本“消

  • 如何更改UIkit图标的颜色。我正在使用react组件。具体地说,我想改变分隔图标的颜色:https://getuikit.com/docs/divider 谢了。

  • 标题文字颜色的动作是不改变的,如何改变标题文字颜色的动作栏?这是我的风格。xml 风格xml

  • 我想在TextField中更改字体颜色。我找到了、来更改背景和边框的颜色,但没有找到文本的颜色。

  • 问题内容: 是的,语言规范定义结果为“ 2”。如果VM采取不同的方式,则不符合规范。 大多数编译器都会对此抱怨。以Eclipse为例,它将声称永远不会执行return块,但这是错误的。 编写这样的代码我需要知道如何执行此操作: 假设:我有这样的代码: 我想改变的颜色并以颜色为蓝色颜色绿色 M到红色的数字橙色 如何更改此文字的颜色?这些文本来自记事本,也可以直接在文本区域中键入。是非常糟糕的做法,永