简体   繁体   English

带有多个引用的Reactjs滚动

[英]Reactjs Scroll with multiple ref

I have a doubt with the ref in reactjs. 我对reactjs中的引用有疑问。 Sorry, it is dumb but I'm still learning. 抱歉,这很蠢,但我仍在学习。 Well, the issues are I'm trying to scroll to react using ref but my question is because I want to use multiple references. 好吧,问题是我试图滚动以使用ref做出反应,但我的问题是因为我想使用多个引用。

My code is this: 我的代码是这样的:

import React, { Component } from "react";
import './App.css';
import { Row, Col,Image,ListGroup,Button,Jumbotron,Container} from 'react-bootstrap';



class App extends Component {

  constructor(props) {
    super(props)
    this.myRef = React.createRef()
    this.myRef2 = React.createRef()    // Create a ref object 
}


handleOnClick = (event) => {
  //.current is verification that your element has rendered

  window.scrollTo(2, this.myRef2.current.offsetTop) 
}


  render() {


    return (
    <div className="App">
             <button onClick={this.handleOnClick}>Click me</button>

      <Row>
        <Col className="menu text-center" lg ={4}>

          <div className="picture" >
            <Image src={process.env.PUBLIC_URL + '/Images/picture.jpg'} roundedCircle />
          </div>

          <h1 className="menu-name">Carlos Deseda</h1>

          <h4 className="menu-office">Software Engineer - Web Developer</h4>

          <div>
          <Row>
              <Col lg= {3}></Col>
              <Col lg= {6} className="menu-text">
                <ListGroup >
                  <ListGroup.Item>ABOUT</ListGroup.Item>
                  <ListGroup.Item>WORK EXPERIENCE</ListGroup.Item>
                  <ListGroup.Item>EDUCATION</ListGroup.Item>
                  <ListGroup.Item>SKILLS </ListGroup.Item>
                  <ListGroup.Item>CONTACT</ListGroup.Item>
                </ListGroup>
              </Col>
              <Col lg= {3}></Col>
            </Row>
          </div>

        </Col>

        <Col className="info text-center" lg ={8}>

  <div className="ref1" ref={this.myRef}> FirtsOne </div>
  <div className="ref2" ref={this.myRef2}>SecondOne</div>



        </Col>

      </Row>

    </div>

  )}
}

export default App;

With this 有了这个

this.myRef = React.createRef()

this.myRef2 = React.createRef()

I can change the value of my div and works but I want to know if I can join this two in only one react.createRef() like array or I dont know. 我可以更改div的值并正常工作,但是我想知道是否可以像数组那样仅将这两个对象react.createRef()一个react.createRef() Thanks for any help!! 谢谢你的帮助!!

Instead of creating ref like, 与其创建ref像,

this.myRef = React.createRef()

You can just define an empty array in your constructor, 您可以在构造函数中定义一个空数组,

constructor(props) {
    super(props)
    this.myRef = [];
}

Now you can use callback ref pattern to create ref , 现在,您可以使用callback ref模式创建ref

<div className="ref1" ref={(ref) => { this.myRef[0] = ref }}> FirtsOne </div>
<div className="ref2" ref={(ref) => { this.myRef[1] = ref }}>SecondOne</div>

To scroll you can use scrollIntoView , 要滚动,您可以使用scrollIntoView

handleOnClick = (event) => {
  //.current is verification that your element has rendered
  console.log(this.myRef[1]);
  this.myRef[1].scrollIntoView(); 
}

Demo 演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM