2017-12-30 18 views
1

Ich benutze react 16.0.Gibt es eine Möglichkeit, einem Element eine benutzerdefinierte Objekteigenschaft zuzuweisen?

Ich möchte eine benutzerdefinierte Objekteigenschaft einem Element zuweisen und seinen Wert abrufen.

Es ist wie folgt. (https://jsfiddle.net/69z2wepo/96660/) Natürlich funktioniert es nicht.

class Test extends React.PureComponent { 
    render() { 
     let numbers = { number:1, number2:2, number3:3 }; 
     return <div numbers={numbers} onClick={(event) => console.log(event.target.numbers.number)}>Test</div>; 
    } 
} 

ReactDOM.render(
    <Test/>, document.querySelector('body') 
); 

Ich möchte wissen, ob es einen guten Weg gibt. Vielen Dank.

+2

Sie 'Daten- *' Attribute verwenden können und in einem String übergeben. Aber warum willst du das tun? warum nicht eine Komponente erstellen und Requisiten übergeben? Dies ist, wie reagieren bedeutete, zu arbeiten –

+1

Wenn Ihr Zweck es zu tun ist zu vermeiden Bindung in Render, dann können Sie einen Blick auf diese https://stackoverflow.com/questions/45053622/how-to-avoid-binding-inside -Render-Methode/45053753 # 45053753 –

+0

DOM Reisen ist teuer, ganz zu schweigen davon, dass Sie das Reaktionsmuster unterbrechen und Sie können mit seinem [Diffing und Reconciliation-Algorithmus] (https://reactjs.org/docs/reconciliation.html) unterbrechen. das virtuelle DOM wird aus einem guten Grund verwendet :) –

Antwort

1

Wenn Sie nur diesen Wert innerhalb onClick Handler zugreifen möchten, dann können Sie diesen Wert mit dem Action-Handler bind selbst

const handler = (numbers, e) => { 
    console.log(numbers) 
} 
render() { 
    let numbers = { number:1, number2:2, number3:3 }; 
    return <div onClick={this.handler.bind(this, numbers)}>Test</div>; 
} 
+0

mit .bind() oder Pfeil-Funktion in der Render-Methode ist keine gute Lösung, da es eine neue Funktion erstellt jedes Mal die Render-Methode aufgerufen wird. Es gibt viele Gespräche über die Vermeidung dieser Praxis. Bitte überprüfen Sie diese Frage https://stackoverflow.com/questions/45053622/how-to-avoid-binding-inside-render-method/45053753#45053753 –

Verwandte Themen