当前位置: 首页 > 知识库问答 >
问题:

管理国家和投入工作

卢权
2023-03-14

我正在制作一个食谱盒应用程序,我决定从我的处理标题处理输入方法开始。我能够把它拉出来,但是现在我想做一个对象数组(对象包含标题和描述),然后我将通过这个数组映射并显示数据。

但是我的handleSubmit函数没有按我想要的方式工作。我希望用户能够编写多个标题和描述,这些标题和描述将不断添加到该州的recipes数组中。看看代码

import React, { useState } from "react";
import "./styles.css";

import { Form } from "./components/containers/Form";

export default function App() {
  const [title, setTitle] = useState("");
  const [description, setDescription] = useState("");
  const [recipe, setRecipe] = useState([]);

  const handleTitle = e => {
    setTitle(e.target.value);
  };

  const handleDescription = e => {
    setDescription(e.target.value);
  };

  const handleSubmit = e => {
    e.preventDefault();
    if (title !== "" && description !== "") {
      setRecipe(prevState => {
        const data = { title: title, description: description };

        return {
          ...prevState,
          recipe: prevState.recipe.concat(data)
        };
      });
    }
  };

  return (
    <div className="App">
      <Form
        title={title}
        description={description}
        handleTitle={handleTitle}
        handleDescription={handleDescription}
        handleSubmit={handleSubmit}
      />
    </div>
  );
}
import React from "react";

export const Form = ({
  handleTitle,
  handleDescription,
  handleSubmit,
  title,
  description
}) => {
  return (
    <div>
      <form onSubmit={handleSubmit}>
        <input
          type="text"
          onChange={handleTitle}
          placeholder="title"
          value={title}
        />

        <input
          type="text"
          onChange={handleDescription}
          placeholder="description"
          value={description}
        />
        <button>Add</button>
      </form>
    </div>
  );
};

共有1个答案

屈健柏
2023-03-14

设置配方时,将配方状态的原始类型更改为对象。相反,您应该返回一个包含以前食谱和新食谱的新数组。

我在下面附上了一个可运行的示例:

const Form = ({
  handleTitle,
  handleDescription,
  handleSubmit,
  title,
  description
}) => {
  return (
    <div>
      <form onSubmit={handleSubmit}>
        <input
          type="text"
          onChange={handleTitle}
          placeholder="title"
          value={title}
        />

        <input
          type="text"
          onChange={handleDescription}
          placeholder="description"
          value={description}
        />
        <button>Add</button>
      </form>
    </div>
  );
};

function App() {
  const [title, setTitle] = React.useState("");
  const [description, setDescription] = React.useState("");
  const [recipes, setRecipes] = React.useState([]);

  const handleTitle = e => {
    setTitle(e.target.value);
  };

  const handleDescription = e => {
    setDescription(e.target.value);
  };

  const handleSubmit = e => {
    e.preventDefault();
    if (title !== "" && description !== "") {
      setRecipes(prevState => {
        const data = { title: title, description: description };
        return [...prevState, data];
      });
      setTitle("");
      setDescription("");
    }
  };

  return (
    <div className="App">
      <Form
        title={title}
        description={description}
        handleTitle={handleTitle}
        handleDescription={handleDescription}
        handleSubmit={handleSubmit}
      />
      <h5>Recipes</h5>
      {recipes.length === 0
        ? (
          <div>No recipes</div>
        )
        : (
        <ul>
          {recipes.map(({ title, description }) => (
            <li>
              {title} : {description}
            </li>
          ))}
        </ul> 
      )}
    </div>
  );
}

ReactDOM.render(<App/>, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.0/umd/react-dom.production.min.js"></script>
<div id="root"></div>
 类似资料:
  • Quickie对象状态简介 了解实例在会话中的状态是很有帮助的: 瞬变 -不在会话中且未保存到数据库中的实例;即没有数据库标识。这类对象与ORM的唯一关系是它的类有一个 Mapper 与之相关的。 悬而未决的 当你 Session.add() 一个暂时的实例,它将变为挂起。它实际上还没有被刷新到数据库中,但是下一次刷新发生时会被刷新。 持久的 -存在于会话中且在数据库中有记录的实例。通过刷新使挂起

  • 投资管理 跨境贸易 在国际贸易活动中,买卖双方可能互不信任。因此需要两家银行作为买卖双方的保证人,代为收款交单,并以银行信用代替商业信用。 区块链可以为信用证交易参与方提供共同账本,允许银行和其它参与方拥有经过确认的共同交易记录并据此履约,从而降低风险和成本。 一带一路 一带一路中对区块链技术的探索应用,能让原先无法交易的双方(例如,不存在都认可的国际货币情况下)完成交易,并且降低贸易风险、减少成

  • 每个国家都有一个特定的 ISO 3166代码 。 根据输入数据和用户的交互行为,在Gio地球表面的国家可以有以下几种状态: 1. 被选中的国家 当用户点击Gio地球表面某个国家的区域时,这个国家会以“被选中”的状态点亮。此时这个国家被称为"被选中的国家"。 可以通过 configure() API来设置被选中国家的颜色,具体设置方法如下所示: controller.configure({     

  • 设置专家 功能介绍:设置专家,学员可向专家提问问题,专家可设置付费回答。 适用场景:学员在家自学并询问老师。 步骤 从【在线问答】→【专家管理】→【添加专家】,进入设置专家页面。 搜索的专家昵称为访问过你店铺的微信昵称。 编辑专家资料 功能介绍:设置专家信息资料以及付费金额。 步骤 从【在线问答】→【专家管理】→【编辑】,进入编辑专家资料页面。

  • 6.11电话面,苹果没录音功能, 简单自我介绍 1.CSS盒模型 2.没听清问了啥,好像是元素重叠怎么办 3.垂直居中能说出几种 4.浏览器存储有几种及区别 5.父子组件通信 6.子组件通信具体实现 7.非父子组件如何通信 8.vue生命周期,父子组件生命周期先后顺序 9.事件循环是什么,宏任务微任务先后顺序,宏任务和微任务有哪些 10.大文件上传逻辑,怎么实现秒传和断点续传 11.vue双向数据

  • 问题内容: 我已经找到了针对Objective-C的答案,但是林先生很难迅速做到这一点。 我用它来获取当前位置的国家代码: 但是,如何将该国家/地区代码转换为国家/地区名称,例如在此示例中,将“ US”转换为“ United States”? 问题答案: 迅捷3