当前位置: 首页 > 面试题库 >

如何在React或React-Redux中将数据从一个组件传递到另一个组件?

柳高卓
2023-03-14
问题内容
import React, { Component } from 'react';





class BigText extends Component {



  constructor(props) {

        super(props);



        this.state = {

            title: '',

            text: '',

            summary: ''

        };



        this.handleInputChange = this.handleInputChange.bind(this);

    }



    handleInputChange(event) {



        this.setState({

            [event.target.name]: event.target.value

        });



    }



  render() {



    return (

      <div>

        <div>

          <div className="row animated fadeIn">



                <div className="px-1" style={{ width:100 + '%' }}><br />



                    <div className="mb-1">

                      <input type="text"

                       className="form-control"

                       placeholder="Title"

                       name="title"

                       value={this.state.title}

                       onChange={this.handleInputChange}

                       />

                    </div>



                    <div className="mb-1">

                      <textarea

                      className="form-control"

                      placeholder="Text"

                      name="text"

                      value={this.state.text}

                      onChange={this.handleInputChange}

                      />

                    </div>



                    <div className="mb-1">

                      <textarea

                       className="form-control"

                       placeholder="Summary"

                       name="summary"

                       value={this.state.summary}

                       onChange={this.handleInputChange}

                       />

                    </div>

                </div>

                <div>

              </div>

          </div>

    </div>

    </div>

    )



  }

}



export default BigText;


import React, { Component } from 'react';

import BigText from './bigText.js';

import InboxStyle from './inboxStyle.js';

import ImageStyle from './imageStyle.js';

import BigTextMobile from './bigText.mobile.js';

import InboxStyleMobile from './inboxStyle.mobile.js';

import ImageStyleMobile from './imageStyle.mobile.js';



class BasicNotification extends Component {



  constructor(props) {

    super(props);

    this.state = {value: ''};



    this.handleClick = this.handleClick.bind(this);

  }



  static contextTypes = {

    router: React.PropTypes.object

  }



  handleClick() {

    this.context.router.push('/notifications');

  }



  handleChange(event) {

    this.setState({value: event.target.value});

  }



    checkRadio =(e) =>{

  if(e.target.checked) {

    this.setState({layout: e.target.value});

  }

}



  render() {



    return (

      <div>

        <div>

          <h1 className="px-2">Create Notification</h1>

          <hr />

          <div className="row px-1 py-2 animated fadeIn">



                <div className="px-1 mr-2" style={{ width:50 + '%' }}><br />



                    <div className="mb-1">

                      <input type="text"

                       className="form-control"

                       placeholder="Title"

                       name="title"

                       />

                    </div>



                    <div className="mb-1">

                      <textarea

                      className="form-control"

                      placeholder="Text"

                      name="text"

                      />

                    </div>



                      <div>

                          <select placeholder="Logo" className="form-control" onChange={this.handleChange}>

                            <option default>Select Logo</option>

                            <option>Default</option>

                            <option>Custom</option>

                          </select>

                      </div>

                    <div><br />



                      <div className="btn-group" data-toggle="buttons">



                      <label className="btn btn-css btn-outline-secondary">

                        <input type="radio" name="layout" value="image" onChange={this.checkRadio}/>ImageStyle

                      </label>



                      <label className="btn btn-css btn-outline-secondary">

                        <input type="radio" name="layout" value="big" onChange={this.checkRadio}/>BigText

                      </label>



                      <label className="btn btn-css btn-outline-secondary">

                        <input type="radio" name="layout" value="inbox" onChange={this.checkRadio}/>InboxStyle

                      </label>

                    </div>



                      {

                          (this.state.layout === "big")?



                        <BigText/>:



                        (this.state.layout === "image")?



                        <ImageStyle/>:



                        (this.state.layout === "inbox")?



                        <InboxStyle/>:



                        null

                        }



                      <br />



                    <div className="row px-1" >

                      <div>

                        <button className="nav-link btn btn-block btn-info" onClick={this.handleClick} >Save</button>

                      </div>

                      <div className="px-1">

                        <button className="nav-link btn btn-block btn-danger"> Cancel</button>

                      </div>

                    </div>



                    </div><br />



                </div>

                <div>

                      {

                        (this.state.layout === "big")?



                        <BigTextMobile text={this.state.text} summary={this.state.summary} title={this.state.title}/>:

                        (this.state.layout === "image")?



                        <ImageStyleMobile/>:



                        (this.state.layout === "inbox")?



                        <InboxStyleMobile/>:



                        null

                      }

                </div>

          </div>

    </div>

    </div>

    )



  }

}



export default BasicNotification;

这是我制作的屏幕,我在该屏幕上导入了三个文件,这些文件将在单击单选按钮时显示。另外还有一个相关的移动屏幕,例如,我现在导入了,如您看到的BigText,它包含表格,现在我想在BigTextMobile组件中打印其输入值


问题答案:

为了简化解决方案,您可以执行以下操作:

<BigText onChange={data => {this.setState({ data })}} />

然后,在 BigText 组件中,您可以通过此回调添加一些数据,如下所示:

handleInputChange(event) {

    const data = {
        [event.target.name]: event.target.value
    };

    this.setState(data );
    this.props.onChange(data);
}

并将数据从状态传输到您的 BigTextMobile 组件:

<BigTextMobile data={this.state.data} ... />


 类似资料:
  • 我有一个产品组件,我希望将其图片传递给另一个组件,我的图片从Rails后端上传,并映射产品详细信息。我想实现的是,当您单击按钮时,您的产品图片将显示在设计页面中进行自定义设计。 设计页面当您单击设计我按钮时,根据产品,该产品的图片应该出现在设计页面中 陈列

  • 我从API中提取了一些产品,并将它们显示在卡中。卡片上有一个更详细的链接,如果用户单击该链接,它会将用户带到所选的产品详细信息页面。我的productDetails页面路由正常,但我很难找到将获取的数据作为道具传递到productDetails页面的方法。 这是我目前拥有的:My FeaturedProduct.js: 我的产品详细信息页面:

  • 我试图找出如何通知另一个组件状态更改。假设我有3个组件——pp.jsx、Header.jsx和SidebarPush.jsx我只是想用onclicka切换一个类。 因此,标题。jsx文件将有2个按钮,点击时将切换状态为真或假。另外两个组件是应用程序。jsx和Header。jsx需要了解这些状态的变化,以便在这些状态发生变化时可以切换类。

  • 问题内容: 我想将多个值从一个servlet传递到另一个servlet。请告诉我如何通过? 问题答案: 取决于您是否使用会话: 使用session.setAttribute()将数组存储在会话变量中。 使用session.getAttribute();检索数组。 但是,变量将一直保留到会话终止,您用其他东西覆盖它或将其删除为止。 如果将一个servlet转发到另一个servlet,则可以将其存储在

  • 非常感谢任何帮助。 编辑:我不敢相信我居然要明确声明我不想复制粘贴它。

  • 我在将状态从孩子发送到家长方面遇到了问题。点击主组件中的菜单后,我想改变状态active并将此active发送到侧边栏组件,因为我想隐藏/显示侧边栏取决于CSS中的active类。在Vanilla JS中很容易,但在React中我有点困惑。 主: 菜单: 侧栏: 应用程序JS