Ich versuche, das verbleibende Zeichen mit reactjs zu zählen. Ich habe die Funktion definiert, die mit dem Status kommuniziert und an die untergeordnete Komponente übergeben wird. In der Kindkomponente erhalte ich einen Fehler von Uncaught TypeError: Kann die Eigenschaft 'length' von undefined nicht lesen.Kann Eigenschaft 'Länge' von undefined [reactjs] nicht lesen
app.js
export default class App extends Component {
constructor(props){
super(props);
this.state = {max_char:32};
this.handleChange = this.handleChange.bind(this);
}
handleChange(charLength){
console.log('charLength');
this.setState({
max_char:32 - charLength.length
});
console.log(this.state.max_char);
}
render() {
return (
<div>
<Layout fixedHeader>
<Content>
<div className="page-content">
<DeviceEventList />
<DeviceDialog onChange={this.handleChange} />
</div>
<div className="empty-space">
</div>
</Content>
</Layout>
</div>
);
}
}
geräte dialog.js
class DeviceDialog extends Component {
constructor(props) {
super(props);
console.log('this.props',this.props.onChange);
}
handleInputChange(event){
console.log(event.target.value);
let name = event.target.value;
this.props.onChange(name);
}
renderOwnADevice(){
console.log('open',this.props.active_device_event.open);
return(
<div className="device-action">
<Dialog open={this.props.active_device_event.open} onCancel={this.props.CancelDeviceEvent}>
<DialogContent>
<Textfield
onChange={()=> {this.handleInputChange(event)}}
pattern="-?[0-9]*(\.[0-9]+)?"
error="Input is not a number!"
label="Device Serial Number"
floatingLabel
/>
<span style={{ float:'right'}}>character</span>
</DialogContent>
</Dialog>
</div>
)
}
render() {
if (!this.props.active_device_event){
return <h5 style={{ textAlign:'center' }}>Click icon based on your work</h5>;
}
let icon_name = this.props.active_device_event.icon_name;
if(icon_name == 'devices_other'){
return (<div>Device Other</div>);
}
if(icon_name == 'add_circle_outline'){
return (this.renderOwnADevice());
}
}
}
Können Sie bitte meine eine Verwirrung löschen? Was ist der Unterschied zwischen onChange = {(event) => {this.handleInputChange (event)}} und onChange = {this.handleInputChange}? Welche ist für welches Szenario geeignet? – milan
Sie sollten Ihre Handler immer vor Ihre Rendermethode binden und dann einfach eine Referenz an den gebundenen Handler im Render übergeben, wie 'onChange = {this.handleInputChange}'. Wenn Sie es stattdessen im Rendering (entweder über '.bind (this)' oder durch Erstellen eines Funktions-Wrappers, wie Sie es tun) binden, wird bei jedem Render-Aufruf eine neue Funktion erstellt, wodurch unnötiger Overhead entsteht. [eslint-plugin-react] (https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md) hat eine kurze Erklärung. – pleunv