简体   繁体   English

删除一个<div>反应中的点击

[英]Delete a <div> onClick in React

I would like to delete a search result by clicking on the X icon on the individual card.我想通过单击单个卡片上的 X 图标来删除搜索结果。

The search returns 10 recipes from the API, generating 10 divs.搜索从 API 返回 10 个配方,生成 10 个 div。 How would I go about removing individual divs onClick of the icon whilst keeping the other divs?我将如何在保留其他 div 的同时删除图标的单个 div? Essentially just a remove search result button.本质上只是一个删除搜索结果按钮。

return (
    <div className='App'>
      <form onSubmit={getSearch} className="search-form">
        <InputGroup>
          <InputGroupAddon addonType="prepend">
            <InputGroupText><FontAwesomeIcon icon={faSearch} /></InputGroupText>
          </InputGroupAddon>
          <Input className="search-bar" type="text" placeholder="Search for recipe..." value={search} onChange={updateSearch} />
        </InputGroup>
        <Button color="primary" size="sm" className="search-button" type="submit">Search</Button>
      </form>
      <div className="recipes">
        {recipes.map(recipe => (
          <Recipe
            key={recipe.recipe.label}
            title={recipe.recipe.label}
            theUrl={recipe.recipe.url}
            image={recipe.recipe.image}
            ingredients={recipe.recipe.ingredients}
            source={recipe.recipe.source}
            healthLabels={recipe.recipe.healthLabels}
            servings={recipe.recipe.yield} />
        ))}
      </div>
    </div>

在此处输入图片说明

const Recipe = ({ title, theUrl, image, ingredients, source, healthLabels, servings }) => {
    return (
        <div className={style.recipe}>
            <FontAwesomeIcon className={style.delete} icon={faTimes} />
            <h3 >{title}</h3>
            <Badge className={style.badge} color="primary">{source}</Badge>
            <p>Serves: <Badge color="primary" pill>{servings}</Badge></p>
            <img src={image} alt='food' />
            <ol className={style.allergens}>
                {healthLabels.map(healthLabel => (
                    <li>{healthLabel}</li>
                ))}
            </ol>
            <div className={style.ingr}>
                <ol>
                    {ingredients.map(ingredient => (
                        <li>{ingredient.text}</li>
                    ))}
                </ol>
                <Button className={style.button} outline color="primary" size="sm" href={theUrl} target="_blank">Method</Button>
            </div>
            <div className={style.info}>
                <div className={style.share}>
                    <WhatsappShareButton url={theUrl}><WhatsappIcon round={true} size={20} /></WhatsappShareButton>
                    <FacebookShareButton url={theUrl}><FacebookIcon round={true} size={20} /></FacebookShareButton>
                    <EmailShareButton url={theUrl}><EmailIcon round={true} size={20} /></EmailShareButton>
                </div>
            </div>
        </div>

    );
}

在此处输入图片说明

Simply update the recipes array and React will update the HTML.只需更新recipes数组,React 就会更新 HTML。

I'm not sure where recipes comes from, but if you set an onClick on, say, <Recipe label="x"> that deletes the corresponding recipe element from recipes , then React should no longer render that recipe.我不确定recipes来自哪里,但是如果您设置onClick ,例如<Recipe label="x">recipes中删除相应的 recipe 元素,那么 React 不应再呈现该配方。

That should be easy.那应该很容易。 Here's one way:这是一种方法:

add onClick to this添加onClick到此

<FontAwesomeIcon onClick={deleteRecipe} className={style.delete} icon={faTimes} />

pass a reference of the function that deletes the recipe.传递删除配方的函数的引用。

deleteRecipeHandler = (id) => {
 // filter your recipes here such that the new recipes array doesn't contain the recipe
 // with the id you're getting here.

 // Change the below code how you need
   const newRecipes = oldRecipes.filter(recipe => {
     return recipe.id !== id;
   });
}

{recipes.map(recipe => (
          <Recipe
            key={recipe.recipe.label}
            deleteRecipe={this.deleteRecipeHandler.bind(this,recipe.recipe.id)}
            title={recipe.recipe.label}
            theUrl={recipe.recipe.url}
            image={recipe.recipe.image}
            ingredients={recipe.recipe.ingredients}
            source={recipe.recipe.source}
            healthLabels={recipe.recipe.healthLabels}
            servings={recipe.recipe.yield} />
        ))}

since you're destructuring your props you can use因为你正在破坏你的道具,你可以使用

const Recipe = ({ title, theUrl, image, ingredients, source, healthLabels, servings, deleteRecipe }) => {
    return (
        <div className={style.recipe}>
            <FontAwesomeIcon onClick={deleteRecipe} className={style.delete} icon={faTimes} />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM