ternary operator inside map

自古美人都是妖i 提交于 2020-01-13 19:17:50

问题


I'm working on a webapp where the user views a list of items and can mark certain items as favourites. The favourites are provided as an array of ID's with a prop (this.props.favourites). To prevent duplicate entries I want to replace the 'add to favourites' button with a 'delete from favourites' button if the item.id is already in the this.props.favourites array.

However, the ternary If statement I've made crashes on a syntax error. Yet I thought I followed the official example (https://reactjs.org/docs/conditional-rendering.html) pretty closely.

This is the code that I used:

render() { 

       const items = this.state.items.map((item, index) => (
           <p key={index}>
               {item.name}
           </p>

           {(this.props.favourites.include(item) ? (
               <button>add fvourites</button>
             ) : (
               <button>delete</button>
     )}

       ));
       return (
           <div>
               <button onClick={this.LoadApi}>Show fetch Items</button>
               <div>{items}</div>
           </div>
       );
   }
}

Does anyone have an idea what I am doing wrong?


回答1:


try something like below

{this.props.favourites.includes(item) ? <button>add favourites</button> :
     <button>delete</button>
 }



回答2:


Issues:

1- You are returning 2 elements inside map callback method, that is not correct, so wrap them inside a div.

2- You have a extra ( here: {(this.props.favourites.include(item)

3- Use includes not include.

Solution:

const items = this.state.items.map((item, index) => (
    <div key={index}>
        <p>
           {item.name}
        </p>

        {this.props.favourites.includes(item) ? (
           <button>add fvourites</button>
        ) : (
           <button>delete</button>
        )}
    </div>
))



回答3:


You have extra ( at the start. Change

{(this.props.favourites.include(item)...

to

{this.props.favourites.include(item)...




回答4:


import * as React from 'react'

render() { 
  const items = this.state.items.map((item, index) => (
    <React.Fragment key={index}>
      <p>{item.name}</p>
      {this.props.favourites.includes(item) ? (
        <button>add favourites</button>
      ) : (
        <button>delete</button>
      )}
    </React.Fragment>
  ));

  return (
    <div>
      <button onClick={this.LoadApi}>Show fetch Items</button>
      <div>{items}</div>
    </div>
  );
}

Changes made:

  • remove extra parenthesis as Prakash sharma pointed out.
  • Wrap return value of map in React.Fragment. Cannot return multiple elements from a function without wrapping in a Fragment or array.
  • Change .include to .includes


来源:https://stackoverflow.com/questions/48599660/ternary-operator-inside-map

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!