如何在表单中仅输出最后一次提交的表单,在这里使用React和JavaScript,谢谢你

uinbv5nw  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(100)

目前,我在一个页面上有一个表单。我希望在表单下面显示最新的表单提交,但它将显示所有表单提交日期。我不知道如何处理这个问题。
下面是表单组件的代码,如果有帮助的话。

export default function TourneyForm() {
  const [hallname, setHallName] = useState("");
  const [name, setName] = useState("");
  const [matricnumber, setMatricNumber] = useState("");
  const [players, setPlayers] = useState(0);
  const [sport, setSport] = useState("");
  const [brackettype, setBracketType] = useState("");
  const handleSubmit = (e: any) => {
    e.preventDefault();
    axios
      .post(TOURNEY_URL, {
        hallname: hallname,
        name: name,
        matricnumber: matricnumber,
        players: players,
        sport: sport,
        brackettype: brackettype,
      })
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });
    setHallName('')
    setName('')
    setMatricNumber('')
    setPlayers(0)
    setSport('')
    setBracketType('')
  };
  return (
    <>
      <form onSubmit={handleSubmit}>
        <div className="form-group row py-4">
          <div className="col"></div>
          <label className="col-1" htmlFor="hallname">
            Hall Name
          </label>
          <div className="col-3">
            <select
              className="custom-select"
              id="hallname"
              value={hallname}
              onChange={(e) => setHallName(e.target.value)}
            >
              <option selected>Name of Hall/RC</option>
              <option value="Temasek Hall">Temasek Hall</option>
              <option value="Eusoff Hall">Eusoff Hall</option>
              <option value="KEVII Hall">KEVII Hall</option>
              <option value="Kent Ridge Hall">Kent Ridge Hall</option>
              <option value="Sheares Hall">Sheares Hall</option>
            </select>
          </div>
          <div className="col"></div>
        </div>
);}

下面是我调用Form组件并尝试在下面显示最新提交的页面的代码

export default function CreateTourney() {
  const[data, setData] = useState([])
  axios.get(url)
  .then (function (response) {
    setData(response.data)
  });
  return (
    <>
      <NavBar />
      <div className="row">
        <div className="col"></div>
        <span className="col-5 text-center fs-5 py-3">
          Fill in and submit this form to create a new tournament bracket! Click "See all tournaments" to find
          your newly created tournament.
          <br /><br />
          Note: One student number can only be registered for one tournament.
        </span>
        <div className="col"></div>
        <hr />
      </div>
      <TourneyForm />
      
      {data.filter(element.data == )}
        {data.map((element) => <TourneyIndivListing data={element} />)}
      
    </>
    
  )
}

我不知道如何处理这个问题。我尝试了几种方法,例如使用数据过滤器,或者使用if else语句来查看输入值是否与最新记录的值相同。然而,我不知道该传递什么作为参数,我不断得到错误。希望我能收到关于如何解决这个问题的提示。非常感谢。
这是网站的前端渲染

这是后端数据库的一个示例。

请让我知道如果你需要任何额外的信息。谢谢你!

qmb5sa22

qmb5sa221#

如果我正确理解了您的问题,您希望在下面显示您的表单和最新提交的表单。提交新表单将重置输入并更新下面显示的最新提交。
我理解你的需求,你有两种可能性。
1.如果您只需要显示最后一个而不是所有提交,则仅从数据库中恢复最后一个提交。这样,您可以获得一些性能时间,特别是如果您有很多提交。在这种情况下,您需要更新后端代码,以便仅恢复上次提交的内容。对于SQL情况,它看起来像这样:
SELECT * FROM submissions ORDER BY created_at DESC LIMIT 1
然后,您应该更新您的CreateTourney组件,以处理单个提交,而不是一组提交:

{data && 
    <TourneyIndivListing data={data} />
}

我也会把你的axios调用放在一个函数中,让我们称之为“fetchSubmission”,并使用useEffect在组件挂载时调用它:

useEffect(() => {
   fetchSubmission()
}, [])

然后,将fetchSubmission()函数添加到TourneyForm中:

<TourneyForm fetchSubmission={fetchSubmission}/>

现在,您应该在axios回调中从TourneyForm组件调用fetchSubmission函数,这样每次创建新提交时,它都会刷新您上次提交的文件。
1.恢复所有提交,从您的后端按created_date DESC排序:
SELECT * FROM提交ORDER BY created_at DESC
然后在CreateTourney组件中添加一个条件以显示所有提交或最后一个提交。

{showAll ?
   data.map((element, index) => ( <TourneyIndivListing key={index} data={element} fetchSubmission={fetchSubmission}/>)
:
<TourneyIndivListing data={data[0]} fetchSubmission={fetchSubmission}/>
}

希望这能对你有所帮助

相关问题