如何在反应中访问事件中的当前元素?

时间:2016-02-25 15:26:15

标签: javascript reactjs redux

代码:

class Locations extends React.Component {
    render() {
        let { home, work, onChange } = this.props;
        return <div className="controls">

            <GoogleMapLoader
                containerElement={
                    <div
                        {...this.props}
                        style={{
                            height: '100%'
                        }} >
                    </div>
                }
                googleMapElement={
                    <GoogleMap
                        ref="map"
                        defaultZoom={15}
                        center={{
                            lat: 47.6205588,
                            lng: -122.3212725,
                        }}
                    >
                        <SearchBox
                            ref="searchBoxHome"
                            placeholder="Home"
                            controlPosition={google.maps.ControlPosition.TOP_LEFT}
                            onPlacesChanged={onChange(this.refs.searchBoxHome.getPlaces(), 'home')}
                        />
                        ...

错误:

  

TypeError:this.refs.searchBoxHome未定义

我不确定如何将元素上的方法正确绑定到我传入的onChange函数。

动作:

export const changeAddress = (places, place) => {
    return {
        type: 'CHANGE_ADDRESS',
        places,
        place
    }
};

2 个答案:

答案 0 :(得分:3)

event默认传递给函数,您可以通过event.target访问该元素。

onChange(element, home) {
  ...
}

<SearchBox
  ref="searchBoxHome"
  placeholder="Home"
  controlPosition={google.maps.ControlPosition.TOP_LEFT}
  onPlacesChanged={event => onChange(event.target, 'home')}
/>

答案 1 :(得分:1)

您可以尝试使用arrow function,就像这样

<SearchBox
  ref="searchBoxHome"
  placeholder="Home"
  controlPosition={ google.maps.ControlPosition.TOP_LEFT }
  onPlacesChanged={
    () => onChange(this.refs.searchBoxHome.getPlaces(), 'home')
  }
/>