【问题标题】:Slide Material-UI cannot read property style of "undefined"幻灯片材质-UI 无法读取“未定义”的属性样式
【发布时间】:2019-10-08 07:39:52
【问题描述】:

我最近在我的项目中实现了 Material-UI Slide,并想问是否有人可以向我解释为什么我这样编写代码时可以工作:

{selectedItem && selectedItem.modal && selectedItem.modal.body ? (
    selectedItem.modal.body.map((section, key) => (
      <Section section={section} key={key} />
    ))
  ) : (
    <Slide
      direction={animate === 'stepIn' ? 'right' : 'left'}
      in={animate === 'idle'}
    >
      <Grid container={true} spacing={3}>
        {items.map((item, key) => (
          <Grid item={true} xs={6} md={4} lg={3} key={key}>
            <MaterialCard
              key={key}
              onClick={onCardClicked(item)}
              className={classes.card}
            >
              <CardActionArea className={classes.cardArea}>
                <CardMedia
                  image={item.image || undefined}
                  component="img"
                />

                <CardContent className={classes.cardContent}>
                  <Typography
                    component="p"
                    className={classes.cardContentTypographyHeader}
                  >
                    <Hyphenated language={de}>{item.label}</Hyphenated>
                  </Typography>

                  {item.description ? (
                    <Typography
                      component="p"
                      className={classes.cardContentTypography}
                    >
                      <Hyphenated language={de}>
                        {item.description}
                      </Hyphenated>
                    </Typography>
                  ) : null}
                </CardContent>
              </CardActionArea>

              {selectedItem && selectedItem.id === item.id ? (
                <>
                  <div className={classes.cardSelectedOverlay} />
                  <Done className={classes.cardSelectedOverlayIcon} />
                </>
              ) : null}
            </MaterialCard>
          </Grid>
        ))}
      </Grid>
    </Slide>

但是当我在幻灯片中移动 section.map 时编译失败。我也想为进来的部分制作动画。

<Slide
    direction={animate === 'stepIn' ? 'right' : 'left'}
    in={animate === 'idle'}
  >
    {selectedItem && selectedItem.modal && selectedItem.modal.body ? (
      selectedItem.modal.body.map((section, key) => (
        <Section section={section} key={key} />
      ))
    ) : (
      <Grid container={true} spacing={3}>
        {items.map((item, key) => (
          <Grid item={true} xs={6} md={4} lg={3} key={key}>
            <MaterialCard
              key={key}
              onClick={onCardClicked(item)}
              className={classes.card}
            >
              <CardActionArea className={classes.cardArea}>
                <CardMedia
                  image={item.image || undefined}
                  component="img"
                />

                <CardContent className={classes.cardContent}>
                  <Typography
                    component="p"
                    className={classes.cardContentTypographyHeader}
                  >
                    <Hyphenated language={de}>{item.label}</Hyphenated>
                  </Typography>

                  {item.description ? (
                    <Typography
                      component="p"
                      className={classes.cardContentTypography}
                    >
                      <Hyphenated language={de}>
                        {item.description}
                      </Hyphenated>
                    </Typography>
                  ) : null}
                </CardContent>
              </CardActionArea>

              {selectedItem && selectedItem.id === item.id ? (
                <>
                  <div className={classes.cardSelectedOverlay} />
                  <Done className={classes.cardSelectedOverlayIcon} />
                </>
              ) : null}
            </MaterialCard>
          </Grid>
        ))}
      </Grid>
    )}
  </Slide>

代码适用于每张卡片,除了里面有模式的卡片。模态包含例如文本,文本输入。当我点击里面有模式的卡片时,我得到这个错误:

感谢您的帮助!

【问题讨论】:

    标签: reactjs typescript material-ui


    【解决方案1】:

    Slide's children prop 的文档中,您可以找到:

    单个子内容元素。

    ⚠️需要能够持有参考。

    Slide uses React.cloneElement 为单个孩子添加 ref 和 props。如果有多个孩子或者如果children 是一个数组(即使该数组只包含一个孩子),那么Slide 将收到您遇到的错误,因为children.props 未定义并且它正在尝试引用children.props.style .

    下面是一个小例子,有助于更好地理解错误原因:

    import React from "react";
    import ReactDOM from "react-dom";
    
    const MockSlide = ({ children }) => {
      if (children.props) {
        return (
          <div>
            {children}
            children.props is defined
          </div>
        );
      }
      return (
        <div>
          {children}
          children.props is not defined
        </div>
      );
    };
    const sectionArray = [
      "An array also causes problems (even if only one element)"
    ];
    function App() {
      return (
        <div className="App">
          <MockSlide>
            <div>Single child works fine</div>
          </MockSlide>
          <br />
          <br />
          <MockSlide>
            <div>Multiple children</div>
            <div>causes problems with Slide</div>
          </MockSlide>
          <br />
          <br />
          <MockSlide>
            {sectionArray.map(section => {
              return <div>{section}</div>;
            })}
          </MockSlide>
        </div>
      );
    }
    
    const rootElement = document.getElementById("root");
    ReactDOM.render(<App />, rootElement);
    

    一种可能的解决方案是将Slide 中的所有内容包装在一个&lt;div&gt; 元素中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2021-08-04
      • 2017-01-15
      相关资源
      最近更新 更多