2016-09-13 5 views
0

Wie kann ich auf das Element li im Click-Handler zugreifen, um eine Klasse hinzuzufügen, wenn darauf geklickt wird?Zugriff auf den Elementknoten in react redux

const Type = React.createClass({ 
    clickHandler: function() { 
    ... 
    }, 
    render() { 
    const classType = `cell type type-${this.props.name}` 
    return (
     <li 
     onClick={this.clickHandler} 
     className={classType} 
     > 
     {this.props.name} 
     </li> 
    ) 
    } 
}) 
+0

Ich bin nicht vertraut mit reagieren selbst, aber fast alle Frameworks, die Ereignis-Wrapper übergeben eine Referenz im clickHandler-Argument an den Bereich/viewModel/dies des Action-Handler und der zweite Parameter ist oft der Dom-Knoten selbst. Hast du eine Pause im clickHandler gemacht, um die Liste der Argumente anzusehen? –

+1

Haben Sie hier geschaut: https://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html#under-the-hood-autobinding-and-event-delegation –

Antwort

-1

Wenn Sie irgendwelche Daten des li erhalten möchten Sie gerade in dem Aufruf der Event-Funktion hinzufügen könnte, wenn das Element hinzugefügt wird. Sagen Sie bitte classType in onClick zugreifen möchten:

const Type = React.createClass({ 
    clickHandler: function (classType) { 
    /* Do something with the li classType */ 
    }, 
    render() { 
    const classType = `cell type type-${this.props.name}` 
    return (
     <li 
     onClick={() => this.clickHandler(classType)} 
     className={classType} 
     > 
     {this.props.name} 
     </li> 
    ) 
    } 
}) 
1

Die „React-ful“ Weg, dies zu tun wäre, um zu speichern, die li Klassennamen oder Status in der Komponente Zustand (oder Redux Ich denke, wenn das Ihr Ding) und modifiziere es über den Click-Handler.

const Type = React.createClass({ 
    clickHandler: function() { 
    this.setState({wasClicked: true}); 
    }, 
    render() { 
    const classType = `cell type type-${this.props.name}` + (this.state.wasClicked ? " some-new-class-name" : " ") 
    return (
     <li 
     onClick={this.clickHandler.bind(this)} 
     className={classType} 
     > 
     {this.props.name} 
     </li> 
    ) 
    } 
}) 

Beachten Sie, dass der „diesen“ Umfang an clickhandler zu binden (um Zugang zu this.setState), wenn Sie ES6 verwenden.

Verwandte Themen