suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Speichern Sie Formularwerte mit React im Array

Ich habe einige Probleme beim Übertragen von Werten aus einem Formular in ein Array, das ich auf dem Bildschirm zuordne.

const ForumTopic = [
  {
    title: "第一篇帖子",
    messages: "测试",
    author: "Dagger",
    count: 1,
    date: "02/16",
  },
];

const [topic, setTopic] = useState(ForumTopic);

Speichern Sie das ForumTopic im Status, sodass Einträge hinzugefügt und auf dem Bildschirm angezeigt werden, nachdem Sie unten auf die Schaltfläche „Senden“ geklickt haben.

const addTopic = (e) => {
    e.preventDefault();
    setTopic([...topic, e.target.value]);
  };

  <form onSubmit={addTopic}>
          创建主题标题
          <label htmlFor="title">
            <input id="title"></input>
          </label>
          编写您的消息
          <label htmlFor="message">
            <textarea id="message"></textarea>
          </label>
          <label htmlFor="author">
            <input id="author" defaultValue="Dagger" hidden></input>
          </label>
          <label htmlFor="count">
            <input id="count" defaultValue="1" hidden></input>
          </label>
          <label htmlFor="date">
            <input id="date" defaultValue="02/16/2023" hidden></input>
          </label>
          <button type="submit">
            发布新消息
          </button>
        </form>

Das ist mein Code und Formular. Der Zweck des Codes besteht darin, den Wert jedes Tags im Formular auf topic数组中创建一个新对象。我希望将所有内容存储在一个新对象中,每个标签的id zu verschieben, damit er mit dem Namen jedes Objekts (Titel, Autor, Datum usw.) übereinstimmt. Aus irgendeinem Grund erhalte ich jedoch nur eine undefinierte Fehlermeldung.

P粉092778585P粉092778585492 Tage vor491

Antworte allen(2)Ich werde antworten

  • P粉766520991

    P粉7665209912023-09-11 14:26:00

    问题在于你的addTopic函数中:

    e.target.value始终为undefined

    要访问数据,你需要这样做:

    const addTopic = (e) => {
        e.preventDefault()
    
        const myData = {
            title: e.target.title.value,
            message: e.target.message.value
        }
        
        setTopic(prev => [...prev, myData])        
    
    }

    Antwort
    0
  • P粉760675452

    P粉7606754522023-09-11 09:40:43

    一种简单的方法是这样做。

    您需要使用input的onChange获取到您正在获取的值。

    示例链接:https://stackblitz.com/edit/react-8r9f8l?file=src%2FApp.js

    import React, { useState } from 'react';
    
    const ForumTopic = [
      {
        title: 'First Post',
        messages: 'test',
        author: 'Dagger',
        count: 1,
        date: '02/16',
      },
    ];
    
    export default function App() {
      const [topic, setTopic] = useState(ForumTopic);
      const [inputObj, setInputObj] = useState({
        title: '',
        messages: '',
        author: 'Dagger',
        count: 1,
        date: '02/16',
      });
    
      const handleChange = (event) => {
        setInputObj((curr) => ({
          ...curr,
          [event.target.name]: event.target.value,
        }));
      };
    
      const addTopic = (e) => {
        e.preventDefault();
        setTopic([...topic, inputObj]);
      };
    
      return (
        <>
          <form onSubmit={addTopic}>
            <label htmlFor="title">
              创建一个主题标题
              <input
                id="title"
                name="title"
                value={inputObj.title}
                onChange={handleChange}
              ></input>
            </label>
            <label htmlFor="message">
              写下您的消息
              <textarea
                id="message"
                name="messages"
                value={inputObj.messages}
                onChange={handleChange}
              ></textarea>
            </label>
            <label htmlFor="author">
              <input id="author" name="author" defaultValue="Dagger" hidden></input>
            </label>
            <label htmlFor="count">
              <input id="count" name="count" defaultValue="1" hidden></input>
            </label>
            <label htmlFor="date">
              <input id="date" name="date" defaultValue="02/16/2023" hidden></input>
            </label>
            <button type="submit">发布新消息</button>
          </form>
          {topic.map((item) => {
            return (
              <>
                <p>{item.title}</p>
                <p>{item.messages}</p>
                <p>{item.author}</p>
                <p>{item.count}</p>
                <p>{item.date}</p>
                <span>------------</span>
              </>
            );
          })}
        </>
      );
    }

    Antwort
    0
  • StornierenAntwort