【发布时间】:2019-07-06 12:26:45
【问题描述】:
我对 React 还很陌生(一个月前才开始学习),我正在尝试在页面上显示一个简单的计数器,但它只会更新一次。另外,每当我console.log() useState 变量时,它们总是为空,但是由于我将它们添加到页面上的输出,我可以看到它们正在更新,但我仍然无法 console.log 值?是什么赋予了?我一定做错了什么,但我不知道为什么。
这是codesandbox 中“问题”的演示。
这是代码:
import React, { useState } from "react";
import "jqwidgets-scripts/jqwidgets/styles/jqx.base.css";
import JqxInput from "jqwidgets-scripts/jqwidgets-react-tsx/jqxinput";
const MyForm2: React.FC = () => {
const [count, setCount] = useState(0);
const [email, setEmail] = useState("");
const [name, setName] = useState("");
const onEmailChange = (e?: any) => {
setCount(count + 1);
setEmail(e.args.value);
console.log('You typed: ' + e.args.value);
console.log("name: " + name + ", email: " + email);
};
const onNameChange = (e?: any) => {
setCount(count + 1);
setName(e.args.value);
};
return (
<div>
Name:{" "}
<JqxInput value={name} onChange={(e: any) => setName(e.args.value)} />
Email: <JqxInput value={email} onChange={onEmailChange} />
<p>Count: {count}</p>
<p>email: {email}</p>
<p>name: {name}</p>
</div>
);
};
export default MyForm2;
谢谢。我期待着找出我的重大错误:-)
【问题讨论】:
-
关于无法使用console.log,我现在意识到这是因为它是一个功能组件。每次组件需要更新时都会调用该函数,因此每次都是新调用(与类不同;这也可以解释为什么 useState 变量实际上是常量,但似乎可以“一直”更新)。这就是我在 React.FC 中使用 console.log 的方式(但不是在我的 onWhateverChange 方法中): useEffect(() => console.log('count = ' + count));
标签: javascript reactjs typescript