javascript reactjs events jsx

javascript - Aplicar className/onClick/onChange no funciona en el componente Custom React



reactjs events (2)

La razón es bastante simple, cuando haces clic como

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

no es un evento que se establece en el componente, sino un accesorio que se pasa al componente de la Company y se puede acceder como props.company en el componente de la Compañía,

lo que debe hacer es especificar el evento onClick y className en el componente Empresa como

import React, { Component } from ''react''; const Company = ({company, onClick, className}) => ( <li onClick={onClick} className={className}> {company.Nummer} {company.Bezeichnung} </li> ) export default Company

La función transmitida como accesorio al componente de la Company se puede transmitir con cualquier nombre como

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

y usado como

import React, { Component } from ''react''; const Company = ({company, editCompany}) => ( <li onClick={editCompany}> {company.Nummer} {company.Bezeichnung} </li> )

Soy casi nuevo para react . Estoy tratando de crear una máscara simple de edición y creación. Aquí está el código:

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

La clase de empresa se ve así:

import React, { Component } from ''react''; const Company = ({company}) => <li> {company.Nummer} {company.Bezeichnung} </li> export default Company

Mi pregunta ahora es, ¿por qué no se onclick evento onclick cuando hago clic en una Company ?

En esta parte:

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


debes vincular el evento en tu componente hijo:

import React, { Component } from ''react''; const Company = ({ company, onClick }) => <li onClick={onClick}> {company.Nummer} {company.Bezeichnung} </li> export default Company

o

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

si desea que todos los accesorios pasados ​​a su componente Compagny (excepto la compañía) vaya a su etiqueta li. vea ES6 operador de propagación y descanso.