javascript - 从不同的父组件传递 Prop

标签 javascript reactjs

我有多个父组件,所有形式,它是一个检查生成器。你输入你的信息,然后他们打印你的支票。子组件是支票布局,所有数据都来自表单。

这是我的第一个父组件 - BusinessAddress

import React from 'react';
import './../App.css';
import Check from './Check';

class BusinessAddress extends React.Component {
  constructor(props) {
    super(props);
    this.state = {text: {
      name: 'BusinessAddress',
      a: '',
      b: '',
      c: '',
      d:  '',
      e: '',
      f: '',
      g: '',
      h: ''
    }};

  }

  handleChange(property, event) {
    console.log(event.target.value);
    const text = {...this.state.text};
    text[property] = event.target.value;
    this.setState({text: text});
  }

  handleSubmit(event) {
    console.log(this.state.text.e);
  }

  render() {

    return (
      <div>
      <div className="form-box">
        <h3>Business Address</h3>
        <label>Business Name</label>
        <input type="text" placeholder="Business Name" value={this.state.text.a} onChange={this.handleChange.bind(this, 'a')} maxLength="30" />
        <label>Name Line 2</label>
        <input type="text" placeholder="Business Name Line 2" value={this.state.text.b} onChange={this.handleChange.bind(this, 'b')} maxLength="90" />
        <label>Street Address</label>
        <input type="text" placeholder="Street Address" value={this.state.text.c} onChange={this.handleChange.bind(this, 'c')} maxLength="30" />
        <label>Address Line 2</label>
        <input type="text" placeholder="Street Address Line 2" value={this.state.text.d} onChange={this.handleChange.bind(this, 'd')} maxLength="30" />
        <label>City</label>
        <input type="text" className="short" placeholder="City" value={this.state.text.e} onChange={this.handleChange.bind(this, 'e')} maxLength="30" />
        <label>State</label>
        <input type="text" className="short" placeholder="State" value={this.state.text.f} onChange={this.handleChange.bind(this, 'f')} maxLength="30" />
        <label>Postal</label>
        <input type="text" className="short" placeholder="Postal" value={this.state.text.g} onChange={this.handleChange.bind(this, 'g')} maxLength="30" />
        <label>Phone (optional)</label>
        <input type="text" className="short" placeholder="Phone" value={this.state.text.h} onChange={this.handleChange.bind(this, 'h')} maxLength="30" />
    </div>

    <Check data={this.state.text} />

      </div>
    )
  }

}

export default BusinessAddress;

这是我的子组件

import React from 'react';
import './../App.css';
import BusinessAddress from './BusinessAddress';

export class Check extends React.Component {
  constructor(props) {
    super(props);
    this.state = {}

  }
  render() {
    const newObject = this.props.data;
    const data = Object.values(newObject);

    if(data[0] == "BusinessAddress") {
    }

    return (
      <div>

        {data.map((data) => <li>{data}</li>)}

        <div id="Address"></div>
        <div id="Bank-Info"></div>

      </div>
    )
  }
}



export default Check;

在子组件中,我希望能够找出数据来自哪个组件,以及根据它的父组件将其放置在 DOM 中的什么位置。

您可以在我的父组件 BusinessAddress 中看到,我已将组件名称添加到状态以传递给子组件。我只是不确定如何处理 IF 语句,或者我是否以正确的方式传递数据。

如有任何帮助,我们将不胜感激!

最佳答案

您可以将父函数作为 props 渲染给子函数,然后可以检查组件名称是否与父函数完全相同,请注意在处理 map 函数时应放置 key 属性。这是比引用数组索引更好的做法。这是解决方案。

在父组件中

class BusinessAddress extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      name: 'BusinessAddress',
      text:{ a: '',
             b: '',
             c: '',
             d: '',
             e: '',
             f: '',
             g: '',
             h: ''
      }
    };
  }
  handleComponentName = name => {
    return this.state.name === name;
  }

  ....

  <Check data={this.state.text} handleParent={this.handleComponentName}/>



在子组件中

export class Check extends React.Component {
  constructor(props) {
    super(props);
    this.state = {}

  }

  render() {
    const data = Object.values(this.props.data);
    const result = (this.props.handleParent("BusinessAddress"), null)
    if (result) {
        // do something here
    }
    return (
      <div>

        {data.map((item, index) => <li key={index}>{item}</li>)}

        <div id="Address"></div>
        <div id="Bank-Info"></div>

      </div>
    )
  }
}

关于javascript - 从不同的父组件传递 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57190706/

相关文章:

javascript - 使用 jQuery 检测键盘按键并为此添加功能

javascript - 如何在 native 博览会中深度链接到特定屏幕

reactjs - 服务器端渲染 react - 虚拟 DOM?

d3.js - d3 v4 + react + ES6 : How to create axis programmatically?

javascript - 在 converseJS 插件中阅读自定义节?

javascript - SlideDown div 显示在其他 div 后面

javascript - 基于其他Select字段选择ant design更新Select Option列表

html - Bootstrap 类未在 React 组件中获取

javascript - 我应该在 React.js 函数组件中哪里进行 AJAX 和 API 调用?

javascript - 仅将列表中的项目转移到另一个列表javascript