单击后如何隐藏 React 容器?

如何解决单击后如何隐藏 React 容器?

所以我有一个覆盖 flex 容器,当点击它时会为电影添加提名。如何使它不出现,从而在电影已被提名后不提供单击它的选项?点击事件位于 MovieList 容器中,其中 handleNominationsClick 函数从 props 中取出并将其添加到叠加层的 onClick 属性中。

这是应用程序:

    const [nominations,setNominations] = useState([]);

    const nominateMovie = (movie) => {
        const newNominationList = [...nominations,movie];
        setNominations(newNominationList);
    };

    return (
        <div className='container-fluid movie-app'>
            <div className='row d-flex align-items-center mt-4 mb-4'>
                <MovieListheading heading='Movies' />
                <SearchBox searchValue={searchValue} setSearchValue={setSearchValue} />
            </div>
            <div className='row'>
                <MovieList
                    movies={movies}
                    nominationComponent={AddNominations}
                    handleNominationsClick={nominateMovie}
                />
            </div>
            <div className='row d-flex align-items-center mt-4 mb-4'>
                <MovieListheading heading='Nominations' />
            </div>

电影列表组件:

onst MovieList = (props) => {
    const NominationComponent = props.nominationComponent;

    return (
        <>
            {props.movies.map((movie,index) => (
                <div className='image-container d-flex justify-content-start m-3 col-3 d-flex flex-column'>
                    <img src={movie.Poster} alt='movie'></img>
                    <div
                        onClick={() => props.handleNominationsClick(movie)}
                        className='overlay d-flex align-items-center justify-content-center'
                    >
                        <NominationComponent />
                    </div>
                </div>
            ))}
        </>
    );
};

解决方法

我建议将提名的电影存储在一个对象中,该对象提供 O(1) 查找并将 nominations 作为道具传递给 MovieList,以便可以有条件地呈现叠加层 div。我假设您的 movies 数据有一个 id 属性(或某些唯一标识属性)可以使用。如果您的数据没有唯一标识符,那么我强烈建议您扩充它以包含一个标识符,以便您可以在映射时使用正确的 React 键。

应用

const [nominations,setNominations] = useState({}); // <-- object

const nominateMovie = (movie) => {
    setNominations(nominations => ({
      ...nominations,[movie.id]: true // <-- set movie nomination by id
    }));
};

return (
    <div className='container-fluid movie-app'>
        <div className='row d-flex align-items-center mt-4 mb-4'>
            <MovieListHeading heading='Movies' />
            <SearchBox searchValue={searchValue} setSearchValue={setSearchValue} />
        </div>
        <div className='row'>
            <MovieList
                movies={movies}
                nominationComponent={AddNominations}
                nominations={nominations} // <-- pass nominations
                handleNominationsClick={nominateMovie}
            />
        </div>

电影列表

const MovieList = (props) => {
  const NominationComponent = props.nominationComponent;

  return (
    <>
      {props.movies.map((movie,index) => (
        <div className='image-container d-flex justify-content-start m-3 col-3 d-flex flex-column'>
          <img src={movie.Poster} alt='movie'></img>
          {!props.nominations[movie.id] && ( // <-- conditional render
            <div
              onClick={() => props.handleNominationsClick(movie)}
              className='overlay d-flex align-items-center justify-content-center'
            >
              <NominationComponent />
            </div>
          )}
        </div>
      ))}
    </>
  );
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?