【问题标题】:Edit/Update input field with React使用 React 编辑/更新输入字段
【发布时间】:2021-03-12 09:58:36
【问题描述】:

我是新来的反应,我在用数据库中的对象值预填充输入字段的值后尝试编辑输入字段,那么如果值是 value={data.info},我应该在 onChange 上添加什么?因为我无法输入或更改初始值。我看过很多教程,但是这个。和道具让我很困惑

import React, { useState } from 'react';
import { useParams } from 'react-router-dom';
import useAsync from '../useAsync';

export default function Details() {
  const url = 'https://..';
  const { index } = useParams();
  const { data } = useAsync(url + index);
  const [state, setState] = useState(false);



const showForm = () => {
    return (
        <div>
            <form>
                <input type="text" value={data.info} onChange={} />
            </form>
        </div>
    )
}


return (
    <div className="details" >
        {data && <p key={index}>{data.info}</p>}
        <button onClick={() => setState({ showForm: true })}>Edit</button>
        {state.showForm ? showForm() : null}
    </div>
)

}

【问题讨论】:

  • index 有什么作用?你不是在映射任何东西吗?让我为此创建一个代码 sn-p。
  • 它只给了我一个对象列表中的一个对象 ...details/-MV_ja1hQWBi6AnVvI2W,它是一个详细信息页面,我可以查看对象,填写输入,之后我无法更改输入值那

标签: reactjs database forms fetch edit


【解决方案1】:

您可以将“默认值”添加到您的状态。所以你可以将data 值移动到你的useState(false) 所以useState(data)


import React, { useState } from "react";

const App = () => {
  const [formInput, setFormInput] = useState(""); // You can add your "data" as default value

  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>formInput Value {formInput}</h2>
      <input
        type="text"
        value={formInput}
        onChange={(e) => setFormInput(e.target.value)} // You need to set the state with the onchange value from the input
      />
    </div>
  );
};

export default App;

链接到CodeSandbox

【讨论】:

  • 我试过 useState(data) 但输入字段是空的,是不是因为我的数据对象有 2 个值? {info: "fgdfgd", item: "gdfgd"} info: "fgdfgd" item: "gdfgd" __proto__: Object
  • 如果我使用 useState({data}) 填充的输入显示 [object Object] 并且可以更改,否则如果我使用 useState({data.info}) 会给我一个语法错误,或者如果我使用 useState(data.info) 它会给我这个错误“TypeError: Cannot read property 'info' of null”
  • 为什么它给你错误“无法读取属性“信息””是因为尚未填充数据对象。你需要做的是将你的使用状态构造成useState({ info : '', item : ''}) 这样你就可以做到data.info 因为关键的“信息”将存在。
  • 我想我试过了,反正我现在用纯 javascript 做编辑部分,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多