【问题标题】:Hide Child Component Element After onClick using ReactJS使用 ReactJS 在 onClick 之后隐藏子组件元素
【发布时间】:2022-01-04 20:29:58
【问题描述】:

我是 React 新手,通过编码学习,这里我有组件 A,它具有带有 menuItems 的选择元素(所有材料 ui),当用户单击选择元素并从下拉列表中选择时,就在用户选择整个组件之后应该去显示:无,这可能吗?我的意思是用户应该不能再在页面上看到选择元素了

英语不是我的母语,所以可能会有错误。

建议/帮助表示赞赏。

组件 A:

const A: React.FC<AProps> = (props) => {
  const handleChange = (e: React.ChangeEvent<{ value: unknown }>) => {
    const site = e.target.value as string;
    dispatch(changeActiveSite(site));
    if (site) {
      dispatch(getAnalysers(site));
    } else {
      dispatch(clearSiteData(site));
    }
  };

  const sites = [
    {
      ident: "",
      name: "None",
    },
  ].concat(sitess);


  return (
    <React.Fragment>
      <FormControl className={classes.formControl}>
        <InputLabel id="site-select-input-label">site</InputLabel>
        <Select
          id="site-select"
          value={currentSiteId}
          labelId="site-select-input-label"
          onChange={(e) => handleChange(e)}
        >
          {sites.map((site) => {
            return (
              <MenuItem key={site.ident} value={site.ident}>
                {site.name}
              </MenuItem>
            );
          })}
        </Select>
      </FormControl>
    </React.Fragment>
  );
};

该组件位于组件 B 中,如下所示: &lt;div &gt; &lt;A site={site} /&gt; &lt;/div&gt;

【问题讨论】:

  • 让您的子组件的render() {...} 有一个if(this.state.hidden) { return ''; } 行。然后只需设置状态,child.setState({'hidden':true})
  • @HoldOffHunger 你能用我的代码给出答案吗?所以我可以接受
  • 嘿嘿,当然,已发布,如果之后有任何问题,请告诉我。

标签: javascript css reactjs material-ui material-design


【解决方案1】:

让我们想象一下您的MenuItem.js,特别是它的render()constructor()。你会希望它能够被隐藏/不显示,或可见/显示。使用hidden 的状态属性来控制它,您的渲染可能看起来像...

constructor(props) {
    super(props);
    this.state = {
        'hidden':false,
    };
}

render () {
    if(this.state.hidden) {
        return '';
    }
    
    return (
        <div
            onClick={(e) => this.handleOnClick(e)}
        >
            {this.props.value}
        </div>
    );
}

请注意,我还在上面添加了一个 handleOnClick(e) 处理程序!那只会调用this.setState({'hidden':true}),所以就像...

handleOnClick(e) {
    this.setState({'hidden':true});
}

我在其他地方也有类似问题的答案,如果它也可能有帮助:How to set one component's state from another component in React

【讨论】:

  • 你能用 Hooks 代替 class 吗?
  • @walee:嘿,这只是一个例子。你从来没有为你的MenuItem 提供过代码,所以,我只是在猜测,但是你可能已经用钩子对它进行了编码,因为你使用了钩子,因为它已经坏了,对吧?只需将其更新为具有hidden 属性。我只是想回答你的主要问题,而不是陷入样式中。
猜你喜欢
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2013-05-04
相关资源
最近更新 更多