试图更新crud时的奇怪行为

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图更新crud时的奇怪行为相关的知识,希望对你有一定的参考价值。

我有一个奇怪的行为,我相信是因为我现在开始使用REACT。

在我的更新中,我可以用我的数据库中的所有数据显示一个模态 defaultValue={this.state.user.username}我的模态打开数据确定,然后我做我的CREATE工作。onChange={e => this.setState({ username: e.target.value })}

但在我的更新方法中,我试图打印我的 <Form onSubmit={this.update}> 资料 JSON.stringify 如果我有两个字段,只是编辑了其中一个字段,他只是给我带来其中一个字段,他也应该给我带来另一个字段。

构造函数

constructor(props) {
        super(props)
        this.state = {
            users: [],
            user: { id: '', username: '', firstName: '', lastName: '', lang: '' }
        }
    }

<Form onSubmit={this.update}>
  <Row form>
    <Col md={4}>
       <FormGroup>
          <Label>Username</Label>
             <Input
               type="email"
               name="username"
               defaultValue={this.state.user.username}
               onChange={e => this.setState({ username: e.target.value })} />
        </FormGroup>
     </Col>
etc...

更新方法

update = async e => {
e.preventDefault();
const { username, firstName, lastName } = this.state;

const json = JSON.stringify({
    username: username,
    firstName: firstName,
    lastName: lastName,
    lang: 'EN'
})
console.log(json)
etc...
答案

你用数组初始化你的状态 users 和一个对象 user. 然后你调用setState来更新 username 但用户名在你的状态根目录下不存在。

你应该这样调用setState来更新user.username。

this.setState({ user: { username: e.target.value } })

如果你想保留state.user的其他属性,你应该这样调用setState来更新user.username:

this.setState({ user: { ...this.state.user, username: e.target.value } })

顺便说一下,如果你开始使用React,忘记组件类,你应该学习如何编写功能组件。

以上是关于试图更新crud时的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

调用 setNeedsDisplay 时的 Swift 奇怪行为

ViewBag 在创建 MultiSelectList 时的奇怪之处

使用 Twitch 进行身份验证时的 Spring-Boot OAuth2 奇怪行为

使用两个着色器时的opengl奇怪行为

从 cython c 调用 python 函数时的奇怪行为

在 SSE 中进行比较时的奇怪行为