Reactjs Material:如何将 props 传递给 reactjs 材质对话框

Posted

技术标签:

【中文标题】Reactjs Material:如何将 props 传递给 reactjs 材质对话框【英文标题】:Reactjs Material: How to pass to props to reactjs material dialog 【发布时间】:2019-12-14 00:20:44 【问题描述】:

如何将 props 传递给 reactjs material dialog?如果我这样做< FormDialog value=this.prop.value />,则抛出Type ' value: any; ' is not assignable to type 'IntrinsicAttributes' 错误。我如何为FormDialog() 分配类型或以任何其他方式将道具传递给该组件?

Modal.tsx

export default function FormDialog() 
  const [open, setOpen] = React.useState(false);

  function handleClickOpen() 
    setOpen(true);
  

  function handleClose() 
    setOpen(false);
  

  return (
    <div>
      <Button variant="outlined" color="primary" onClick=handleClickOpen>
        Open form dialog
      </Button>
      <Dialog
        open=open
        onClose=handleClose
        aria-labelledby="form-dialog-title"
      >
        <DialogTitle id="form-dialog-title">Subscribe</DialogTitle>
        <DialogContent>
          <TextField
            autoFocus
            margin="dense"
            id="name"
            label="Email Address"
            type="email"
            fullWidth
          />
        </DialogContent>
        <DialogActions>
          <Button onClick=handleClose color="primary">
            Subscribe
          </Button>
        </DialogActions>
      </Dialog>
    </div>
  );

Card.tsx

class ShipmentCard extends Component<ShipmentCardProps, ShipmentCardState> 
  render() 
    return (
      <Card className="Card">
        <CardContent className="Card-Content">
        <FormDialog />
          <Grid container spacing=3>
            <h3 className="Card-Content__Title">this.props.value.name</h3>
            <FormDialog  />/*how i can pass this.props.value  */
          </Grid>
        </CardContent>
      </Card>
    );
  

【问题讨论】:

不需要将组件定义为获取道具吗? @Dave,我尝试将FormDialog 作为组件,但它不起作用。你知道有什么更好的方法来实现吗? 【参考方案1】:

您的函数组件没有声明的道具。你可以这样做:

export default function FormDialog(props:  value: string ) 
   ...

当然最好写一个接口FormDialogProps,再做一个props: FormDialogProps,用于多个props和可复用性。

那么你可以这样做:

<FormDialog value="string" />
<FormDialog value='string' />
<FormDialog value=variable />

【讨论】:

如何在FormDialoghtml 中使用该值?我收到Invalid prop children 您可以在 JSX 代码中将其用作 props.value,在 javascript 代码中用作 props.value。道具children 是另一个道具,如果你想使用它,你必须声明它。通常输入为children: React.ReactNodechildren prop 是你放在组件标签之间的任何东西:&lt;FormDialog&gt;this is a children string&lt;/FormDialog&gt;. 你可以在reactjs.org/docs/components-and-props.htmlreactjs.org/docs/jsx-in-depth.html#children-in-jsx等文档中找到。 注意到了。当我像这样通过&lt;FormDialog value=this.props.value /&gt; 时遇到错误。如果我通过字符串工作良好

以上是关于Reactjs Material:如何将 props 传递给 reactjs 材质对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何结合 ReactJs Router Link 和 material-ui 组件(如按钮)?

reactjs中如何将可选元素作为prop传递给组件

如何使用 styled-components 将 prop 传递给 Material-UI 组件

ReactJS + Material-UI:如何减小 Material-UI 的 <TableRow/> 的列宽?

使用 TypeScript 时如何将 prop 传递给 material-ui@next 中的自定义根组件?

数据变化时如何在ReactJS中刷新Material-Table(Material-ui)组件