Ich versuche ein Nummernfeld zu erstellen, indem ich das Material-ui-Textfeld erweitere. Zu diesem Zweck muss ich die Eingabewerte validieren und die Propagierung für ungültige Werte stoppen. Ich möchte, dass die oberste Containerkomponente das Änderungsereignis behandelt, wenn die Eingabe gültig ist. Wenn ich jedoch einen Event-Handler für das Steuerelement bereitstelle, sprudelt es nicht bis zur Container-Komponente. Wie kann ich das erreichen?Wie wird das Änderungsereignis in der Komponentenhierarchie react.js weitergegeben?
Hier ist mein Code -
Mein Container-Komponente -
class ItemsContainer extends Component {
handleItemChange(e)
{
console.log(e.target.value)
//dispatch further redux action
}
render()
{
const cartTable =() => <ItemTable lines = { this.props.Lines }
onItemChange = { this.handleItemChange.bind(this) } />
return({cartTable })
}
}
Stateless Tabellenkomponente
const CartLineTable = ({
lines,
onItemChange =() => {},
}) => {
let rows = cartLines.map((cl, k) => <NumberField
id = { `${k}` }
color = 'primary'
defaultValue = { cl.value }
onChange = { (e) => onItemChange(e, k, cl) }/> )
return ({rows })
}
Text Steuerung für Zahleneingaben
import React, { Component } from 'react'
import TextField from 'material-ui/TextField'
class NumberFieldBehavior extends React.Component {
handleChange() {
console.log('change fired!', arguments)
//fire the parent components event handler ?
}
}
class NumberField extends NumberFieldBehavior {
render() {
return(
<TextField {...this.props} onChange = {this.handleChange.bind(this)}/>
)
}
}
export default NumberField
, dass dank funktioniert !! – Akhil
Ich bin nicht in der Lage, zusätzliche Argumente, irgendwelche Ideen zu übergeben? – Akhil
In dem obigen Beispiel, das ich Ihnen gegeben habe, können Sie so viele Argumente übergeben, wie Sie wollen, in 'this.props.onChange (arg1, arg2, ...)' – sasidhar