【发布时间】:2021-02-17 07:09:42
【问题描述】:
我有这样的反应代码
const { useState, useEffect } = React;
const { TextField, Button } = MaterialUI;
const Example = props => {
const [myText, setMyText] = useState("default text")
useEffect(() => {
console.log("my text is :", myText)
}, [myText])
return (
<div style={{ flex: 1, flexDirection: 'column'}}>
<TextField
label="Text"
fullWidth
type="text"
defaultValue={myText}
onChange={e => {
console.log('text: ', e.currentTarget.value);
setMyText(e.target.value);
}}
/>
<Button onClick={() => console.log("SUBMIT TEXT :", myText)}>SUBMIT MY NAME</Button>
</div>
)
}
ReactDOM.render(<Example />, document.getElementById('root'));
<script src="https://unpkg.com/react@17.0.1/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.1/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@material-ui/core@4.11.3/umd/material-ui.production.min.js"></script>
<div id="root"></div>
我尝试输入我的文本"Hello World",useEffect 触发并且工作正常,就像我的输入文本一样,但是在我单击submit button 后,文本恢复为默认的“默认文本”
当我点击按钮时如何保留我的输入文本?
【问题讨论】:
-
您不是在调用
setMyText,而是在调用setText,这根本不在您的代码中。此外,您可能想要value={myText},而不是defaultValue={...}。 -
是的,我的代码有点错误,我更新了我的代码
-
当我使用
value={myText}时,我的文本字段在输入时不会更新,所以我使用defaultValue={...} -
什么是
<TextField>?这应该适用于常规<input value={myText} onChange={e => setMyText(e.target.value)} />。 -
我刚刚创建了一个堆栈 sn-p 并没有重现您描述的问题。投票结束,因为不可复制。
标签: reactjs react-hooks state