【问题标题】:how to type transition props in material ui popper如何在材质 ui popper 中键入过渡道具
【发布时间】:2020-08-07 17:02:44
【问题描述】:

我用的是材质uipopper,想把转场分离成一个单独的函数如下

import React from 'react';
import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';
import Popper from '@material-ui/core/Popper';
import Fade from '@material-ui/core/Fade';

const useStyles = makeStyles((theme: Theme) =>
  createStyles({
    paper: {
      border: '1px solid',
      padding: theme.spacing(1),
      backgroundColor: theme.palette.background.paper,
    },
  }),
);

export default function TransitionsPopper() {
  const classes = useStyles();
  const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);

  const handleClick = (event: React.MouseEvent<HTMLElement>) => {
    setAnchorEl(anchorEl ? null : event.currentTarget);
  };

  const open = Boolean(anchorEl);
  const id = open ? 'transitions-popper' : undefined;

  const popperTrans = ({ TransitionProps }) => (
    <Fade {...TransitionProps} timeout={350}>
      <div className={classes.paper}>The content of the Popper.</div>
    </Fade>
  )
  return (
    <div>
      <button aria-describedby={id} type="button" onClick={handleClick}>
        Toggle Popper
      </button>
      <Popper id={id} open={open} anchorEl={anchorEl} transition>
        {popperTrans}
      </Popper>
    </div>
  );
}

我正在使用 typescript,它会抛出 tslint 错误 Binding element 'TransitionProps' implicitly has an 'any' type。如何在此处输入TransitionProps

【问题讨论】:

    标签: reactjs typescript material-ui typescript-typings


    【解决方案1】:

    或者,TransitionProps 被导出,所以你可以这样做:

    import { TransitionProps as TransitionPropsType } from "@material-ui/core";
    

    然后:

      const popperTrans = ({ TransitionProps }: { TransitionProps: TransitionPropsType }) => (
        <Fade {...TransitionProps} timeout={350}>
          <div className={classes.paper}>The content of the Popper.</div>
        </Fade>
      )
    

    【讨论】:

      【解决方案2】:

      我找到了答案。我们可以从Fade 导入FadeProps 并使用它来输入TransitionProps

      import React from 'react';
      import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';
      import Popper from '@material-ui/core/Popper';
      import Fade, { FadeProps } from '@material-ui/core/Fade';
      
      const useStyles = makeStyles((theme: Theme) =>
        createStyles({
          paper: {
            border: '1px solid',
            padding: theme.spacing(1),
            backgroundColor: theme.palette.background.paper,
          },
        }),
      );
      
      export default function TransitionsPopper() {
        const classes = useStyles();
        const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
      
        const handleClick = (event: React.MouseEvent<HTMLElement>) => {
          setAnchorEl(anchorEl ? null : event.currentTarget);
        };
      
        const open = Boolean(anchorEl);
        const id = open ? 'transitions-popper' : undefined;
      
        const popperTrans = ({ TransitionProps }: { TransitionProps: FadeProps }) => (
          <Fade {...TransitionProps} timeout={350}>
            <div className={classes.paper}>The content of the Popper.</div>
          </Fade>
        )
        return (
          <div>
            <button aria-describedby={id} type="button" onClick={handleClick}>
              Toggle Popper
            </button>
            <Popper id={id} open={open} anchorEl={anchorEl} transition>
              {popperTrans}
            </Popper>
          </div>
        );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-07
        • 2022-01-24
        • 2021-10-27
        • 1970-01-01
        • 2015-08-18
        • 2018-11-29
        • 2020-03-11
        相关资源
        最近更新 更多