javascript - 如何向状态 Hook 添加键?

标签 javascript reactjs

嗨,有没有办法向状态 Hook 添加 id 或任何其他键? 我知道有一种方法可以将它添加到像这样的有状态类组件中。

 openModal (id) {
    this.setState({
       isOpen: {
          [id]: true
       }
    });
 }

我的问题是我有一个映射的模式,我需要一次打开每个模式。 现在它们都使用相同的状态并同时打开。 我能想到的唯一方法是向状态以及 onClick 函数添加一个键。 任何可以向我指出单独打开每个模式的方式的建议都非常受欢迎。

这是我的代码

const Video = () => {
  const [modalIsOpen, setModalOpen] = useState(false)
  console.log(modalIsOpen)
  return (
    <Query query={twoVideos}>
    {({ loading, error, data }) => {
    if (loading) return <h2>Loading post...</h2>
    if (error) return <h1>Error fetching the post!</h1>
        return (
        <>
        {data.video.map(videos => {
            const regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
            const match = videos.video.match(regExp);
            const res = (match&&match[7].length==11)? match[7] : false;
        return (
          <div key={videos.id} className="video-box">
          <h2 onClick={() => setModalOpen(true)}>{videos.title}</h2>
          <div className="video-image-box" onClick={() => setModalOpen(true)}>
            <img src={play} className="play-button"/>
            <img src={`https://img.youtube.com/vi/${res}/mqdefault.jpg`} />
          </div>
          {modalIsOpen ?
            <Modal style={customStyles} isOpen={modalIsOpen} onRequestClose={() => setModalOpen(false)}>
                <ReactPlayer 
                    url={`https://www.youtube.com/watch?v=${res}`}
                    playing   
                    config={{
                        youtube: {
                        playerVars: { showinfo: 1, controls: 1 }
                        }
                    }} 
                />
            </Modal>
            : null}
          </div>
        )})}
        </>
        )}}
    </Query>
  )
}

谢谢。

最佳答案

考虑到您只想一次只打开一个模态,而不是在 modelIsOpen 中存储 bool 值,而是使用字符串作为模态的 id

简短片段

{modalIsOpen === videos.id ? <Modal style={customStyles} isOpen={modalIsOpen} onRequestClose={() => setModalOpen("")}>

和 onClick

<h2 onClick={() => setModalOpen(videos.id)}>{videos.title}</h2>

完整代码:

const Video = () => {
  const [modalIsOpen, setModalOpen] = useState(false)
  return (
    <Query query={twoVideos}>
      {({ loading, error, data }) => {
          if (loading) return <h2>Loading post...</h2>
          if (error) return <h1>Error fetching the post!</h1>
          return (
              <>
              {data.video.map(videos => {
                  const regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
                  const match = videos.video.match(regExp);
                  const res = (match&&match[7].length==11)? match[7] : false;
              return (
                <div key={videos.id} className="video-box">
                <h2 onClick={() => setModalOpen(videos.id)}>{videos.title}</h2>
                <div className="video-image-box" onClick={() => setModalOpen(videos.id)}>
                  <img src={play} className="play-button"/>
                  <img src={`https://img.youtube.com/vi/${res}/mqdefault.jpg`} />
                </div>
                {modalIsOpen === videos.id ?
                  <Modal style={customStyles} isOpen={modalIsOpen} onRequestClose={() => setModalOpen("")}>
                      <ReactPlayer 
                          url={`https://www.youtube.com/watch?v=${res}`}
                          playing   
                          config={{
                              youtube: {
                              playerVars: { showinfo: 1, controls: 1 }
                              }
                          }} 
                      />
                  </Modal>
                  : null}
                </div>
              )})}
              </>
          )}}
    </Query>
  )
}

关于javascript - 如何向状态 Hook 添加键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61429220/

相关文章:

javascript - 使用 JQuery 更改 SVG 中的元素

javascript - 按下按钮后隐藏弹出窗口。 react Js

android - 使用 React-Native 在 android 中捕获 RECEIVE_BOOT_COMPLETED 事件

reactjs - 部署到 GitHub Pages 的 React 应用程序给出 "Site not found"

javascript - 如何在react中使用markerEnd绘制箭头

reactjs - 使用 redux-form 6.0.0-rc.3 时, Action 创建者未显示在 "this.props"中

javascript - 在 CycleJS 中用 localStorage 的初始值折叠

javascript - 如何从 Firebase 获取 PWA 数据

javascript - 循环中的 HTTP.post() 回调

javascript - 调用 JavaScript 函数 onClick 时,ASP 单选按钮不会被选择