javascript - react 模式自定义组件未显示正确的数据

标签 javascript reactjs react-hooks

我使用 react 钩子(Hook)构建了这个模式组件。但是,模式在弹出时显示的数据不正确(它始终显示数组中最后一个元素的名称属性)。

//Modal.js
import ReactDOM from 'react-dom';

const Modal = ({ isShowing, hide, home_team }) => {return isShowing ? ReactDOM.createPortal(
  <React.Fragment>
    <div className="modal-overlay"/>
    <div className="modal-wrapper">
      <div className="modal">
        <div className="modal-header">
        <a>Home team: {home_team}</a>
          <button type="button" className="modal-close-button" onClick={hide}>
          </button>
        </div>
      </div>
    </div>
  </React.Fragment>, document.body
) : null;}

export default Modal;

//主要组件

const League = ({ league, matches }) =>{ 
    const {isShowing, toggle} = useModal(); 
    return (
    <Fragment>
        <h2>{league}</h2>
        {
            matches.map((
                { 
                    match_id,
                    country_id,
                    home_team
                }
            ) => 
            {
                return (
                    <div>
                        <p>{match_id}</p>
                        <button className="button-default" onClick={toggle}>Show Modal</button>
                        <a>{home_team}</a>
                        <Modal
                            isShowing={isShowing}
                            hide={toggle}
                            home_team={home_team}
                        />
                        <p>{home_team}</p>
                    </div>
                )
            })
        }
    </Fragment>
  )};

这就是匹配数据集的样子:

 [{
    match_id: "269568",
    country_id:"22",
    home_team: "Real Kings"
},
{
    match_id: "269569",
    country_id:"22",
    home_team: "Steenberg United"
},
{
    match_id: "269570",
    country_id:"22",
    home_team: "JDR Stars "
},
{
    match_id: "269571",
    country_id:"22",
    home_team: "Pretoria U"
},
]

我不确定发生了什么,因为数据似乎传递得很好。

<p>{home_team}</p>

主组件中每次都会显示预期的属性,但是模态始终显示数组中的最后一个 home_team 项(例如 Pretoria U)

最佳答案

您需要在 map 函数内调用useModal。否则,您将打开切换所有模态框,并且最后一个模态框与其他模态框重叠


const HomeTeam = ({ match_id, country_id, home_team }) => {
  const {isShowing, toggle} = useModal();

  return (
    <div>
       <p>{match_id}</p>
       <button className="button-default" onClick={toggle}>Show Modal</button>
       <a>{home_team}</a>
       <Modal
         isShowing={isShowing}
         hide={toggle}
         home_team={home_team}
       />
       <p>{home_team}</p>
     </div>
   )
}

const League = ({ league, matches }) => (
  <Fragment>
    <h2>{league}</h2>
    { matches.map((match) => <Hometeam {...match} /> }
  </Fragment>
);

关于javascript - react 模式自定义组件未显示正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59646925/

相关文章:

javascript - 如何用一个脚本显示两张 map ?

javascript - Puppeteer 评估对于 DOM Node 数组返回未定义

javascript - 当宽度为 100% 时,低分辨率图像显得模糊

javascript - 是否可以在 React.useRef 中提取对 "current"值的引用

reactjs - React.useEffect : State not updating after axios request

javascript - Facebook Like 和 Google +1 按钮在部分回发时消失

javascript - 如何在 JavaScript 变量内编写的 HTML 中将事件作为函数参数传递?

javascript - 如何将获取的数据作为 Prop 传递给带有反应 Hook 的组件?

javascript - setState Concat 仅存储/返回第一个值——React Native

css - React 应用程序 - 避免样式被其他 CSS 覆盖