当前位置: 首页 > 知识库问答 >
问题:

通过输入React将参数从子级传递到父级

白宏放
2023-03-14

我试图将一些信息从子项中的输入字段传递给父项。

到目前为止我所掌握的是:

import React from "react";
import PropTypes from "prop-types";

import Grid from "@material-ui/core/Grid";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
import { withStyles } from "@material-ui/core/styles";

import TimelineWidget from "./timeline-widget/timeline-widget.component";
import ContainerTable from "./container-table/container-table.component";
import HistoryTable from "./history-table/history-table.component";
import ShippingOverview from "./shipping-overview/shipping-overview.component";
import MapWidget from "./map-widget/map-widget.component";

import styles from "./shippingInformation.style";

class shippingInformation extends React.Component {
  constructor() {
  super();
    this.inputChange = this.inputChange.bind(this);
  }

  state = {
    searchString: null
  };

  inputChange(input){
    this.setState({ searchString: input });
  };

  render() {
    const { classes } = this.props;

    return (
      <div className={classes.DashboardPageWrapper}>
        <Grid item xs={12}>
          <Grid container justify="center" spacing={16}>
            <Grid
              key={1}
              item
              xs={12}
              sm={12}
              md={9}
              className={classes.Widget}
            >
              <Typography
                variant="subheading"
                className={classes.WidgetHeading}
              >
                Timeline of Container #
              </Typography>
              <Paper className={classes.WidgetContent}>
                <TimelineWidget />
              </Paper>
            </Grid>

            <Grid
              key={2}
              item
              xs={12}
              sm={12}
              md={3}
              className={classes.Widget}
            >
              <Typography
                variant="subheading"
                className={classes.WidgetHeading}
              >
                Shipping Overview
              </Typography>
              <Paper className={classes.WidgetContent}>
                <ShippingOverview />
              </Paper>
            </Grid>
          </Grid>

          <Grid container justify="center" spacing={16}>
            <Grid item xs={12} sm={12} md={9}>
              <Grid container justify="center" spacing={16}>
                <Grid key={3} item xs={12} className={classes.Widget}>
                  <Typography
                    variant="subheading"
                    className={classes.WidgetHeading}
                  >
                    Containers
                  </Typography>
                  <Paper className={classes.WidgetContent}>
                    <ContainerTable />
                  </Paper>
                </Grid>

                <Grid key={4} item xs={12} className={classes.Widget}>
                  <Typography
                    variant="subheading"
                    className={classes.WidgetHeading}
                  >
                    Status History
                  </Typography>
                  <Paper className={classes.WidgetContent}>
                    <HistoryTable />
                  </Paper>
                </Grid>
              </Grid>
            </Grid>

            <Grid
              key={5}
              item
              xs={12}
              sm={12}
              md={3}
              className={classes.Widget}
            >
              <Typography
                variant="subheading"
                className={classes.WidgetHeading}
              >
                Latest Position
              </Typography>
              <Paper className={classes.WidgetContent}>
                <MapWidget onShippingOverview={this.inputChange.bind(this)} />
              </Paper>
            </Grid>
          </Grid>
        </Grid>
      </div>
    );
  }
}

shippingInformation.propTypes = {
  classes: PropTypes.shape({}).isRequired
};

export default withStyles(styles, { withTheme: true })(shippingInformation);
import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import Typography from "@material-ui/core/Typography";
import TextField from "@material-ui/core/TextField";

import { Bar } from "react-chartjs-2";
import CountUp from "react-countup";
import classNames from "classnames";

import themeStyles from "./shipping-overview.theme.style";

const styles = theme => ({
  container: {
    display: "flex",
    flexWrap: "wrap"
  },
  textField: {
    marginLeft: theme.spacing.unit,
    marginRight: theme.spacing.unit,
    width: 200
  },
  menu: {
    width: 200
  }
});

export class ShippingOverview extends React.Component {
  state = {
    searchString: null
  };

  handleChange(event){
    this.setState ({ searchString: event.target.value}, () => {
      this.props.onShippingOverview(this.state.searchString);
    })
    // this.props.onShippingOverview(input);
  };

  render() {
    const { classes } = this.props;

    return (
      <div className={classes["shipping-overview-widget"]}>
        <div>
          <form className={classes.container} noValidate autoComplete="off">
            <TextField
              ref="result"
              id="full-width"
              label="Tracking ID"
              InputLabelProps={{
                shrink: true
              }}
              placeholder="Placeholder"
              fullWidth
              margin="normal"
              onChange={this.handleChange.bind(this)}
              value={this.state.input}
            />
          </form>
        </div>
      </div>
    );
  }
}

ShippingOverview.propTypes = {
  theme: PropTypes.shape({
    palette: PropTypes.shape({
      primary: PropTypes.shape({
        dark: PropTypes.string,
        main: PropTypes.string,
        light: PropTypes.string,
        contrastText: PropTypes.string
      }),
      secondary: PropTypes.shape({
        main: PropTypes.string
      }),
      common: PropTypes.shape({
        white: PropTypes.string
      })
    })
  }).isRequired,
  classes: PropTypes.shape({}).isRequired
};

export default withStyles(themeStyles, { withTheme: true })(ShippingOverview);

34 this.setstate({searchstring:event.target.value},()=>{

>35 this.props.onchild(this.state.SearchString);

希望有人能帮忙。顺便说一句,我是个小人...

共有1个答案

宗涵蓄
2023-03-14

您在父组件中使用了错误的组件。您的子组件是作为ShippingoverView导入的,但您使用的是MapWidget。更改为ShippingoverView,它就可以工作了。

<ShippingOverview onShippingOverview={this.inputChange} />
 类似资料:
  • 问题内容: 通过回调函数将数据从子级传递到父级组件,但是不起作用。我在这里做错了什么?将数据从子级传递到父级组件-反应-通过回调函数 https://codepen.io/silentarrowz/pen/GEMQEP?editors=0010 这是代码 问题答案: 有几个问题。 1)你必须绑定 2)是异步的,因此不能保证在传递给时将其设置为所需的值。你可以做 要么 解决该问题。

  • 问题内容: 我有两个组成部分: 第一个是父组件,它是通常的React组件。 第二个是孩子,它是功能组件。 我想将 Titles 的值(处于子状态)传递给父Component。这是我的 子组件 代码: 这是我的 父组件 : 这看起来很容易,但这是我第一次使用功能组件。你能帮我吗 ? 问题答案: React就是关于在组件树中向下流动的数据。如果您希望能够显示和/或修改彼此之间的共享状态,则应提升状态并

  • 我50%的希望渺茫:P.我(一开始)试图从一个线程的代码中更新GUI,但得到了NullException。在阅读了一段时间后,我了解到线程淹没了JavaFX应用程序窗口,为了从线程更新GUI,我需要使用以下代码: 所以我确实使用了这个代码,它确实允许我编辑我的主类的图形用户界面。不过,我的问题很简单。= 如何将父级的public void run()中的参数传递给这个?。例如,字符串tmpStri

  • 问题内容: 在我正在从事的新项目中,我开始使用组件而不是指令。 但是,我遇到一个无法找到具体标准方法的问题。 从孩子向父母通知事件很容易,您可以在下面的我的plunkr上找到它,但是从父母向孩子通知事件的正确方法是什么? Angular2似乎通过使用以下方法解决了此问题:https ://angular.io/docs/ts/latest/cookbook/component-communicat

  • 我有一个如下所示的graphql查询: 因此,名称和电子邮件将由名为详细信息的其余endpoint解析,但是地址字段需要由另一个名为地址的其余endpoint解析。>rest终结点还需要在中传递的(因为我的rest服务需要该字段)。我不确定,在这种情况下,我如何设计我的解析器? 同样,一个字段一旦解析,是否可以将数据发送到另一个字段?这在grapqhql中可能吗?

  • 问题内容: 没有参数 带参数 我想得到。我怎么才能得到它? 问题答案: 试试这个: 并在您的职能: