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

应用className / onClick / onChange不适用于自定义React组件

漆雕宏浚
2023-03-14
问题内容

我几乎是新来的react。我正在尝试创建一个简单的编辑和创建蒙版。这是代码:

import React, { Component } from 'react';
import Company from './Company';

class CompanyList extends Component {

    constructor(props) {
        super(props);
        this.state = {
            search: '',
            companies: props.companies
        };
    }

    updateSearch(event) {
        this.setState({ search: event.target.value.substr(0,20) })
    }

    addCompany(event) {
        event.preventDefault();
      let nummer = this.refs.nummer.value;
      let bezeichnung = this.refs.bezeichnung.value;
      let id = Math.floor((Math.random()*100) + 1);
      $.ajax({
          type: "POST",
          context:this,
          dataType: "json",
          async: true,
          url: "../data/post/json/companies",
          data: ({ 
              _token : window.Laravel.csrfToken,
              nummer: nummer,
              bezeichnung : bezeichnung,
          }),
          success: function (data) {
            id = data.Nummer;
            this.setState({
              companies: this.state.companies.concat({id, nummer, bezeichnung})
            })
            this.refs.bezeichnung.value = '';
            this.refs.nummer.value = '';
          }
      });
    }

    editCompany(event) {
      alert('clicked');
      event.preventDefault();
      this.refs.bezeichnung.value = company.Bezeichnung;
      this.refs.nummer.value = company.Nummer;
    }

    render() {
      let filteredCompanies = this.state.companies.filter(
        (company) => {
          return company.bezeichnung.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1;
        }
      );
        return (
        <div>
          <div className="row">
            <div className="col-xs-12 col-sm-12 col-md-12 col-lg-12">Suche</div>
            <div className="col-xs-12 col-sm-12 col-md-9 col-lg-9">
              <div className="form-group">
                <input className="form-control" type="text" value={this.state.search} placeholder="Search" onChange={this.updateSearch.bind(this)} />
              </div>
            </div>
          </div>
          <form onSubmit={this.addCompany.bind(this)}>
            <div className="row">
              <div className="col-xs-12 col-sm-12 col-md-12 col-lg-12">Neuen Eintrag erfassen</div>
              <div className="col-xs-12 col-sm-12 col-md-3 col-lg-3">
                <div className="form-group">
                  <input className="form-control" type="text" ref="nummer" placeholder="Nummer" required />
                </div>
              </div>
              <div className="col-xs-12 col-sm-12 col-md-3 col-lg-3">
                <div className="form-group">
                  <input className="form-control" type="text" ref="bezeichnung" placeholder="Firmenname" required />
                </div>
              </div>
              <div className="col-xs-12 col-sm-12 col-md-3 col-lg-3">
                <div className="form-group">
                  <button type="submit" className="btn btn-default">Add new company</button>
                </div>
              </div>
            </div>
          </form>
          <div className="row">
            <div className="col-xs-10 col-sm-10 col-md-10 col-lg-10">
              <ul>
              { 
                filteredCompanies.map((company)=> {
                  return <Company company={company} key={company.id} onClick={this.editCompany.bind(this)} />
                })
              }
              </ul>
            </div>
          </div>
        </div>
        );
    }
}

export default CompanyList

Company类如下所示:

import React, { Component } from 'react';

const Company = ({company}) => 
  <li>
    {company.Nummer} {company.Bezeichnung}
  </li>


export default Company

现在我的问题是,onclick当我单击时,为什么不触发该事件Company

在这一部分:

      <ul>
      { 
        filteredCompanies.map((company)=> {
          return <Company company={company} key={company.id} onClick={this.editCompany.bind(this)} className="Company"/>
        })
      }
      </ul>

问题答案:

原因很简单,当您点击

<Company company={company} key={company.id} onClick={this.editCompany.bind(this)} />

它不是在组件上设置的事件,而是传递给Company组件并可以像props.company在Company组件中一样访问的prop ,

您需要做的是指定onClick事件,并className在Company组件中指定

import React, { Component } from 'react';

const Company = ({company, onClick, className}) => (
  <li onClick={onClick} className={className}>
    {company.Nummer} {company.Bezeichnung}
  </li>
)

export default Company

作为prop传递给Company组件的函数可以通过任何名称传递,例如

<Company company={company} key={company.id} editCompany={this.editCompany.bind(this)} className="Company"/>

并像

import React, { Component } from 'react';

const Company = ({company, editCompany}) => (
  <li onClick={editCompany}>
    {company.Nummer} {company.Bezeichnung}
  </li>
)


 类似资料:
  • 我想通过一个自定义的泛型unapply函数压缩我的计算器,该函数计算参数并在成功时返回值。 但是这失败了,错误 有什么方法可以实现这一点吗?我已经研究了类型标签,不适用方法的隐式转换,但我不知道如何将它们集成到这个问题中。如何正确定义Eval?

  • 问题内容: 我从formik库开始进行反应,但是我无法弄清道具handleChange和handleBlur的用法。 根据docs的说法,handleBlur可以设置为a上的prop ,然后必须手动向下传递到。 我已经尝试过了,但是没有成功:(为了更加清晰,我保留了关于handleBlur的代码) 这种方法有什么问题?实际上应该如何使用handleBlur和handleChange? 问题答案:

  • 我的selectOneMenu没有触发onchange事件。这是代码: selectOneMenu填充得很好,我可以选择不同的值。但我希望在更改选择后,页面会被刷新,即重新创建支持bean(RequestScoped)(onchange=“submit();”)?但是,当selectOneMenu中的选择被更改时,什么都不会发生。 此外,不调用值change listener PresetGrou

  • 我有一些自定义角色,例如: 当使用'ROLE_USER'时,“spans”中的文本可以正常显示,但当使用其他角色时,文本无法显示。然后我在自定义角色中添加'ROLE_'前缀,它又变得正常了。 我尝试删除“ROLE\uu0”前缀约束,如下所示: 它也不起作用。知道如何删除强制的“ROLE\uuux”前缀吗?

  • 我使用spring boot和spring boot starter hateoas开发了一个rest服务。我在定制ObjectMapper时遇到了一个问题。代码如下: 一个pplication.java 依赖关系: 账单java: BillController.java: 我得到的输出是: 但是我需要“账单”代替“billList”。这是因为ObjectMapper没有被定制。我是否错过了任何配

  • 我有一个Flume组件在监听Syslog流。我做了一个自定义的拦截器来修改调用,但它不起作用。我做错了什么?谢谢你,Andrea 拦截器是一个编译良好的JAR文件,位于@FLUME_HOME/bin目录中 系统将事件记录在文件中而不修改它们,这是相关的DEBUG日志: