最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

HandleNameChange 未定义

网站源码admin28浏览0评论

HandleNameChange 未定义

HandleNameChange 未定义

import React, { useState } from "react";
import "../../css/AddMenuItem.css"
// const express = require('express')
// const app =express();
// app.use(express.json)

/**
 * Description
 * @returns {any}
 */
function MenuAdder() {
  const [ingredient, setIngredient] = useState("");
  const [quantity, setQuantity] = useState("");
  const [itemName, setItemName] = useState("");
  const [price, setPrice] = useState("");
  const [ingredients, setIngredients] = useState([]);
  const[ingDone , setIngDone] = useState(false);

  const handleAddIngredient = () => {
    const newIngredient = { name: ingredient, quantity: quantity };
    setIngredients([...ingredients, newIngredient]);
    setIngredient("");
    setQuantity("");
  };

  const handleItemNameChange = (event) => {
    setItemName(event.target.value);
  };

  const handlePriceChange = (event) => {
    setPrice(event.target.value);
  };

  const handleDoneIngredients = () => {

    console.log(ingredients);
    fetch("http://localhost:3001/addMenu", {
      method: 'POST',
      headers:{
        'Content-Type': 'application/json'
      },
      body:JSON.stringify({ingredients})
    }) .then(response => response.json())
    .then(data => {
      console.log(data);
      if(data.message ==="fault"){
        console.log("fault");
      }
      const form = document.getElementById("menuadder-form");
    form.innerHTML = `
      <label htmlFor="item-name">Item Name:</label>
      <input type="text" id="item-name" name="item-name" value="${itemName}" onChange={handleItemNameChange} required />
      <label htmlFor="price">Price:</label>
      <input type="number" id="price" name="price" value="${price}" onChange={handlePriceChange} required />
      <button type="button" onClick={handleAddOrder}>Add Order</button>
    `;
    setIngDone(true);
    })
    .catch(error => {
      
      console.error(error)
      console.log("paad");
      const form = document.getElementById("menuadder-form");
    form.innerHTML = `
      <label htmlFor="ingredient">Ingredient:</label>
      <input type="text" id="ingredient" name="ingredient" value="${ingredient}" onChange={handleIngredientChange} required />
      <label htmlFor="quantity">Quantity:</label>
      <input type="number" id="quantity" name="quantity" value="${quantity}" onChange={handleQuantityChange} required />
      <button type="button" onClick={handleAddIngredient}>Add Ingredient</button>
    `;

    });

    
  };

  const handleAddOrder = () => {
    // Do something with the item name and price (e.g. add them to an order list)
    fetch("http://localhost:3001/addmenu/completeMenu", {
      method: 'POST',
      headers:{
        'Content-Type': 'application/json'
      },
      body:JSON.stringify({'name':itemName , 'price':price})
    }) .then(response => response.json())
    .then(data => {console.log(data);})
    .catch(error => { console.error(error); });
    // Reset the form to add ingredients again
    const form = document.getElementById("menuadder-form");
    form.innerHTML = `
      <label htmlFor="ingredient">Ingredient:</label>
      <input type="text" id="ingredient" name="ingredient" value="${ingredient}" onChange={handleIngredientChange} required />
      <label htmlFor="quantity">Quantity:</label>
      <input type="number" id="quantity" name="quantity" value="${quantity}" onChange={handleQuantityChange} required />
      <button type="button" onClick={handleAddIngredient}>Add Ingredient</button>
    `;
  };

  /**
   * Description
   * @param {any} event
   * @returns {any}
   */
  const handleIngredientChange = (event) => {
    setIngredient(event.target.value);
  };

  /**
   * Description
   * @param {any} event
   * @returns {any}
   */
  const handleQuantityChange = (event) => {
    setQuantity(event.target.value);
  };

  

  return (
    <div id="menuadder">
      <h3>Add Ingredients</h3>
      <form id="menuadder-form">
        <label htmlFor="ingredient">Ingredient:</label>
        <input type="text" id="ingredient" name="ingredient" value={ingredient} onChange={handleIngredientChange} required />
        <label htmlFor="quantity">Quantity:</label>
        <input type="number" id="quantity" name="quantity" value={quantity} onChange={handleQuantityChange} required />
        <button type="button" onClick={handleAddIngredient}>Add Ingredient</button>
        {ingredients.length > 0 && (
          <div>
            <h3>Added Ingredients:</h3>
            <ul>
              {ingredients.map((ingredient, index) => (
                <li key={index}>{ingredient.name} - {ingredient.quantity}</li>
              ))}
            </ul>
          </div>
        )}
        {ingredients.length > 0 && (
          <button type="button" onClick={handleDoneIngredients}>Done with Ingredients</button>
        )}
        {ingDone &&(
          <input type="text" id="item-name" name="item-name" value="${itemName}" onChange={handleItemNameChange} required />
        )}
        {ingDone && (
          <input type="number" id="price" name="price" value="${price}" onChange={handlePriceChange} required />
        )}
        {ingDone && (
          <button type="button" onClick={handleAddOrder}>Add Order</button>
        )
        }
      </form>
    </div>
  );
}

export default MenuAdder;

我不明白为什么它没有检测到

handleItemNameChange
handlePriceChange
handleAddOrder
。我尝试更改处理程序并将对它们的调用放在返回语句中,但这也没有帮助

我尝试将句柄添加到返回值,因为我认为它之前没有检测到它处于内部形式,但它仍然无法正常工作。任何帮助将不胜感激

回答如下:

handleDoneIngredients 函数中,当响应成功时,form.innerHTML 被设置为一些HTML 字符串。这不是 React 中推荐的做法,因为它会覆盖 React 管理的 DOM,并可能导致组件的状态和事件处理程序发生故障。

React.js:设置 innerHTML 与 dangerouslySetInnerHTML

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论