【问题标题】:React hooks - set state of Parent from child via functionReact hooks - 通过函数从子级设置父级的状态
【发布时间】:2020-10-15 17:48:38
【问题描述】:

伙计们,我刚刚学习 React,我决定尝试构建英雄数据库,但遇到了问题。

当我点击任何英雄时,生物状态和显示状态会更新有关英雄的数据,并弹出模式窗口,其中包含有关他的更多信息。但我不知道如何关闭它。我将 Modal 作为一个单独的组件,当我尝试从子组件调用函数 (updateDisplay) 时。这应该将显示状态设置为 False 它只是不起作用:/

Heroes.js

import React, { useState } from "react";
import Hero from "./Hero";
import styled from "styled-components";

function Heroes(props) {
  const [Bio, setBio] = useState([]);
  const [Display, setDisplay] = useState(false);

  const SingleHeroCont = styled.div`
    display: flex;
    flex-direction: column;
    margin-top: 10px;
    padding: 10px;
    align-items: center;
  `;

  const content = props.data.map((Hero) => (
    <SingleHeroCont
      onClick={() => {
        setBio(Hero);
        setDisplay(true);
      }}
      key={Hero.id}
    >
      <h1>{Hero.name}</h1>
      <img src={Hero.images.sm} alt="Sorry guys"></img>
    </SingleHeroCont>
  ));

  const updateDisplay = () => {
    setDisplay(false);
  };

  return (
    <div className="heroes_cont">
      <Hero updateDisplay={updateDisplay} Display={Display} BioData={Bio} />
      {content}
    </div>
  );
}

export default Heroes;

Hero.js

import React from "react";
import styled from "styled-components";

function Hero({ Display, updateDisplay, BioData }) {
  const HeroAbsolute = styled.div`
    display: ${(props) => (props.showBio ? "block" : "none")};
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: rgba(0, 255, 255, 0.5);
  `;


  return (
    <HeroAbsolute showBio={Display}>
      <div className="hero_bio_cont">
        <h1>{BioData.name}</h1>
        <button onClick={() => updateDisplay}>Close</button>
        <div className="hero_bio_appearance">
          <div>
            <img></img>
            <div>
              <h2>{BioData.powerstats?.power}</h2>
              <h2></h2>
              <h2></h2>
            </div>
          </div>
        </div>
      </div>
    </HeroAbsolute>
  );
}

export default Hero;

【问题讨论】:

    标签: javascript reactjs react-hooks


    【解决方案1】:
    <button onClick={() => updateDisplay}>Close</button>
    

    如我所见,上述代码无法调用updateDisplay 函数。

    正确的用法是

    <button onClick={() => updateDisplay()}>Close</button>
    

    或者

    <button onClick={updateDisplay}>Close</button>
    

    第二种情况请参考箭头函数教程。

    【讨论】:

    • 非常感谢,它成功了。如此愚蠢的错误,我花了大约 2 个小时来解决它;)
    猜你喜欢
    • 2021-08-15
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多