反应状态没有得到更新
React state is not getting Updated
这里我需要在控制台中获取更新的输入状态,但每当在输入中输入某些内容时,我都会收到错误 setSavedinput is not defined。
import "./styles.css";
import React, { useState } from "react";
import ReactDOM from "react-dom";
const blankinput = () => {
const [savedContent, setsavedContent] = useState("");
};
const onChangeHandler = (e) => {
setsavedContent(e.target.value);
console.log(savedContent);
};
export default function App() {
return (
<div className="App">
<input type="Text" onChange={onChangeHandler}></input>
</div>
);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
因为状态只有在组件重新渲染时才有新的值。所以你应该将 console.log
移动到 useEffect
以在组件重新渲染时检查新值。
const onChangeHandler = (e) => {
setsavedContent(e.target.value);
};
useEffect(() => {
console.log(savedContent);
}, [savedContent]);
您的代码存在一些问题,仅在组件主体中使用 hooks
此外,如果您想查看状态的最新更新,请将其放在 return 函数之前。
由于 Reactjs's batching mechanism,您将看不到您的状态的最新更新。并且状态更新是异步的。
这是对您的代码进行了一些更正的片段。
function App() {
const [savedContent, setsavedContent] = React.useState('');
const onChangeHandler = (e) => {
setsavedContent(e.target.value);
};
console.log(savedContent);
return (
<div className="App">
<input type="Text" onChange={onChangeHandler} />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="root"></div>
您的状态是在函数 blankInput 中定义的。由于 JavaScript 中的作用域无法访问该代码,请将其移出该函数以避免错误。
但是,为了正确呈现输入元素,将输入的值设置为 savedContent 状态很重要。
<input type="Text" onChange={onChangeHandler} value={savedContent} />
这样你就不会直接更新输入元素,而是更新触发 React 重新渲染的状态。
钩子(如 useState
)和修改它们的相关函数(如你的 onChangeHandler
)需要进入功能组件内部,而不是外部。以下应该有效:
import "./styles.css";
import React, { useState } from "react";
import ReactDOM from "react-dom";
export default function App() {
const [savedContent, setsavedContent] = useState("");
const onChangeHandler = (e) => {
setsavedContent(e.target.value);
console.log(e.target.value); // savedContent doesn't change immediately
};
return (
<div className="App">
<input type="Text" onChange={onChangeHandler}></input>
</div>
);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
这里我需要在控制台中获取更新的输入状态,但每当在输入中输入某些内容时,我都会收到错误 setSavedinput is not defined。
import "./styles.css";
import React, { useState } from "react";
import ReactDOM from "react-dom";
const blankinput = () => {
const [savedContent, setsavedContent] = useState("");
};
const onChangeHandler = (e) => {
setsavedContent(e.target.value);
console.log(savedContent);
};
export default function App() {
return (
<div className="App">
<input type="Text" onChange={onChangeHandler}></input>
</div>
);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
因为状态只有在组件重新渲染时才有新的值。所以你应该将 console.log
移动到 useEffect
以在组件重新渲染时检查新值。
const onChangeHandler = (e) => {
setsavedContent(e.target.value);
};
useEffect(() => {
console.log(savedContent);
}, [savedContent]);
您的代码存在一些问题,仅在组件主体中使用 hooks
此外,如果您想查看状态的最新更新,请将其放在 return 函数之前。
由于 Reactjs's batching mechanism,您将看不到您的状态的最新更新。并且状态更新是异步的。
这是对您的代码进行了一些更正的片段。
function App() {
const [savedContent, setsavedContent] = React.useState('');
const onChangeHandler = (e) => {
setsavedContent(e.target.value);
};
console.log(savedContent);
return (
<div className="App">
<input type="Text" onChange={onChangeHandler} />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="root"></div>
您的状态是在函数 blankInput 中定义的。由于 JavaScript 中的作用域无法访问该代码,请将其移出该函数以避免错误。
但是,为了正确呈现输入元素,将输入的值设置为 savedContent 状态很重要。
<input type="Text" onChange={onChangeHandler} value={savedContent} />
这样你就不会直接更新输入元素,而是更新触发 React 重新渲染的状态。
钩子(如 useState
)和修改它们的相关函数(如你的 onChangeHandler
)需要进入功能组件内部,而不是外部。以下应该有效:
import "./styles.css";
import React, { useState } from "react";
import ReactDOM from "react-dom";
export default function App() {
const [savedContent, setsavedContent] = useState("");
const onChangeHandler = (e) => {
setsavedContent(e.target.value);
console.log(e.target.value); // savedContent doesn't change immediately
};
return (
<div className="App">
<input type="Text" onChange={onChangeHandler}></input>
</div>
);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>