Reactjs 离子与使用效应。表单中的信息本身会更新,但似乎不会发送到数据库。请在浏览器中检查输入值是否在触发PUThttp请求时发送。我刚刚查看了一下,它们没有发送。body变量的值是多少?我编辑了我的答案,您可能对输入值有问题,请尝试value={title}而不是

Reactjs 离子与使用效应。表单中的信息本身会更新,但似乎不会发送到数据库。请在浏览器中检查输入值是否在触发PUThttp请求时发送。我刚刚查看了一下,它们没有发送。body变量的值是多少?我编辑了我的答案,您可能对输入值有问题,请尝试value={title}而不是,reactjs,react-hooks,crud,use-state,Reactjs,React Hooks,Crud,Use State,离子与使用效应。表单中的信息本身会更新,但似乎不会发送到数据库。请在浏览器中检查输入值是否在触发PUThttp请求时发送。我刚刚查看了一下,它们没有发送。body变量的值是多少?我编辑了我的答案,您可能对输入值有问题,请尝试value={title}而不是value={menu.item_title}谢谢您的帮助。它并没有解决我的问题,但它确实让我思考它。最后,关于单个参数,您是正确的。一旦我意识到了这一点,我就能够通过将我的setInputs拆分为单独的USESTATE,分为setTitle、


离子与使用效应。表单中的信息本身会更新,但似乎不会发送到数据库。请在浏览器中检查输入值是否在触发
PUT
http请求时发送。我刚刚查看了一下,它们没有发送。
body
变量的值是多少?我编辑了我的答案,您可能对输入值有问题,请尝试
value={title}
而不是
value={menu.item_title}
谢谢您的帮助。它并没有解决我的问题,但它确实让我思考它。最后,关于单个参数,您是正确的。一旦我意识到了这一点,我就能够通过将我的setInputs拆分为单独的USESTATE,分为setTitle、setDescription、setPrice等等来修复它。这是个好问题!你尝试了什么来解决你的问题?我根据下面的答案更新了我的useState格式。这使得met可以编辑信息。如果我再次尝试编辑,表单中的信息仍然会更改,但是在刷新后,旧信息仍然会从数据库中提取。新信息不会发送给它。出现项目标题栏中的非空错误。在检查命名约定并删除除一个字段以外的所有字段后,它确实可以工作,但仅限于标题、说明或价格。下面的Olivier说我的setInputs只接受一个参数,所以我想这就是原因。目前正在努力解决该问题。您是否可以将您尝试的内容添加到问题中,而不是将其添加为注释?我相信奥利维尔·博伊塞的回答可能会起作用。他们在回答中建议使用对象作为输入。没问题。道歉。我更新了问题中的代码部分,以反映Olivier建议的更改,并删除了MenuList代码,因为它似乎与问题无关。干杯。介意我问你怎么做吗?我还没有找到解决方案,因为提供的答案不起作用。任何帮助都可能使我走上正确的方向。
import React, { Fragment, useState } from "react";

const EditMenu = ({ menu }) => {
    //editText function    
    const [inputs, setInputs] = useState(menu.item_title, menu.item_price, menu.item_description, menu.item_category);
    const { title, category, price, description } = inputs;
    const onChange = e =>
        setInputs({ ...inputs, [e.target.name]: e.target.value });

    const editMenuItem = async (item_id) => {
        try {
            const body = { title, category, price, description };
            const res = await fetch(`http://localhost:5000/menu/${item_id}`, {
                method: "PUT",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify(body)
            });
            window.location = "/admin";
        } catch (error) {
            console.error(error.message);
        }
    };

    return (
        <Fragment>
            <button type="button" className="btn btn-warning" data-toggle="modal" data-target={`#id${menu.item_id}`}>Edit</button>
            {/*id = "id21"*/}
            <div className="modal" id={`id${menu.item_id}`} onClick={() => setInputs(menu.item_title, menu.item_price, menu.item_description, menu.item_category)}>
                <div className="modal-dialog">
                    <div className="modal-content">
                        <div className="modal-header">
                            <h4 className="modal-title">Edit Menu</h4>
                            <button className="close btn-danger" data-dismiss="modal" onClick={() => setInputs(menu.item_title, menu.item_price, menu.item_description, menu.item_category)}>&times;</button>
                        </div>
                        <div className="modal-body">
                            <input type="text" name="title" placeholder="Title" className="form-control my-3" value={menu.item_title} onChange={e => onChange(e)} />
                            <input type="tel" name="price" placeholder="Price" className="form-control my-3" value={menu.item_price} onChange={e => onChange(e)} />
                            <input type="text" name="description" placeholder="Description" className="form-control my-3" value={menu.item_description} onChange={e => onChange(e)} />
                            <input type="text" name="category" placeholder="Category" className="form-control my-3" value={menu.item_category} onChange={e => onChange(e)} />
                        </div>
                        <div className="modal-footer">
                            <button type="button" className="btn btn-warning" data-dismiss="modal" onClick={() => editMenuItem(menu.item_id)}>Edit</button>
                            <button type="button" className="btn btn-danger" data-dismiss="modal" onClick={() => setInputs(menu.item_title, menu.item_price, menu.item_description, menu.item_category)}>Close</button>
                        </div>
                    </div>
                </div>
            </div>
        </Fragment>

    );
};
function buildInputs(menu) {
  return {
    title: menu.item_title,
    category: menu.item_category,
    price: menu.item_price,
    description: menu.item_description
  };
}

const EditMenu = ({ menu }) => {
  //editText function
  const [inputs, setInputs] = useState(() => buildInputs(menu));
  const { title, category, price, description } = inputs;

  // Needed if you want the inputs to be updtated when the menu property is updated
  useEffect(() => setInputs(buildInputs(menu)), [menu]);

  const onChange = e => setInputs({ ...inputs, [e.target.name]: e.target.value });
  ...
<input type="text" name="title" placeholder="Title" 
       className="form-control my-3" value={title} onChange={onChange} />
  const [inputs, setInputs] = useState({
     title: menu.item_title,
     price: menu.item_price,
     category: menu.item_category,
     description: menu.item_description
  });
//code
<input name="title" value={inputs.title} onChange={onChange}/>
const EditMenu = ({ menu }) => { 
    const [inputs, setInputs] = useState(menu.item_title, menu.item_price, menu.item_description, menu.item_category);
    const { title, category, price, description } = inputs;
const EditMenu = ({ menu }) => { 
    const [item_title, setTitle] = useState(menu.item_title);
    const [item_price, setPrice] = useState(menu.item_price);
    const [item_description, setDescription] = useState(menu.item_description);
const onChange = e =>
        setInputs({ ...inputs, [e.target.name]: e.target.value });
<input... onChange={e => onChange(e)} />
value={item_title} onChange={e => setTitle(e.target.value)} />
value={item_price} onChange={e => setPrice(e.target.value)} />
value={item_description} onChange={e => setDescription(e.target.value)} />