反应检查多个条件以呈现组件

React checking multiple conditions to render a component

我想在渲染组件之前检查 sessionStorage 并检查状态设置的另一个变量。基本上,如果用户已经确认阅读了一条消息,我不想在同一会话中再显示它,所以我的代码如下所示:

const addSession = (noteId: string) => {
  sessionStorage.setItem(noteId, noteId); 
}

const message = (props: ImessageProps) => {
  const [addedInSession, setAddedInSession] = useState(false); 
  return (
     <div>      
     {props.messages.map(m => {
        return (
        {!addedInSession && sessionStorage.getItem(noteId) && <MyComponent />}
         )
      })}
      </div>
  )}

但是当我执行 !addedInSession 时出现错误,它告诉我 ')' 是预期的。如果我删除 !,那么它会在第一个 && 上给出一个错误,说 ',' is expected.

我做错了什么?

使用过滤器并链接地图是我从数组有条件地渲染的第一件事,其次你可以将 bool 放在你的地图前面,因为这些值似乎不会根据消息改变本身。

{!addedInSession && sessionStorage.getItem(noteId) && props.messages.map(...

如果您的意思是 noteId 是消息中的 属性,我想下面就是您要查找的内容

{!addedInSession && props.messages.filter(m => sessionStorage.getItem(m.noteId)).map(...

假设 sessionStorage.getItem 将 return undefined or null if not found

return (
  {!addedInSession && sessionStorage.getItem(noteId) && <MyComponent />}
)

在此代码中,您不在任何 JSX 中,因此您无需使用大括号转义回常规 javascript/typescript。因此,只需删除大括号即可修复语法错误:

return (
  !addedInSession && sessionStorage.getItem(noteId) && <MyComponent />
)