javascript - 将动态 onClick 与 ref 一起使用

标签 javascript reactjs

使用 ref 传递动态属性 onClick= do something 返回:TypeError: _this.listReference is null listReference在我将在下面显示的组件之一中定义。

在组件 #1 中

class Component1 extends Component {
    constructor(props){   
        super(props)
        this.listReference= null;
}
//Returns
<div>
 <SomeComponent  list={(ref) => this.listReference= ref} />
 <Component2  onMarkerClick = {(index) => {
                    this.listReference.scrollTop = 48 * index
                                  }}/> 

在组件 #2 中

render() {
const {classes, driversStore, onMarkerCLick} = this.props

...

{driversStore.sortedSelectedOrders.map((order , index) => {
            return (
              <Component3
                onClick={ () => onMarkerClick(index)} />

在组件 #3 中


  render() {
    const { onClick } = this.props;
    return (
      <div
        onClick={onClick}>

我希望在单击时触发滚动功能(如组件 #1 中所述)。 提前致谢!

最佳答案

Check this example. Hope it can help you!

const Component2 = (props) =>(
  <button onClick={props.onClick}>click me</button>
);

const SomeCompo = (props) =>(
  <div>SomeComponent</div>
);

class Component1 extends React.Component{
    listReference = React.createRef();
  
    render(){
      return(
        <div>
          <SomeCompo list={this.listReference}>reference</SomeCompo>
          <Component2 onClick={this.handleClick} />
        </div>
      );
    }
    
    handleClick = () => {
    
      if(this.listReference){
       this.listReference={scrollTop:100};
      }
      console.log(this.listReference)
    }
}

ReactDOM.render(<Component1/>,document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>

您应该在构造函数中执行以下操作,

this.listReference = React.createRef()

关于javascript - 将动态 onClick 与 ref 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55372893/

相关文章:

javascript - 在 Google Maps V3 上选择多边形

javascript - 为什么会导致 .map 记录到控制台而不是实际 View

javascript - 将 div 实例化到容器内的随机空间

javascript - 为什么 props 变量不能被破坏?

html - &lt;input&gt; 不能作为 <tr> 的子项出现

javascript - 将 JSON 数据循环到 ReactJS 中

JavaScript 事件处理

javascript - react : Prevent scroll when modal is open

javascript - 调度到正确的 reducer

javascript - Openlayers OSM 始终设置为 (long/lat) (0/0)