相关疑难解决方法(0)

使用this.refs的弃用警告

我有一个React组件,我想在单击时切换一个css类.

所以我有这个:

export class myComponent extends React.Component {
  constructor() {
    super();
    this.state = { clicked: false };
    this.handleClick = this.handleClick.bind(this);
  }

  render() {
    return (
      <div>
        <div onClick={this.clicked}><span ref="btn" className="glyphicon">&nbsp;</span></div>
      </div>
    );
  }

  handleClick() {
    this.refs.btn.classList.toggle('active');
  }

  componentDidMount() {
    this.refs.btn.addEventListener('click', this.handleClick);
    this.setState({
      clicked: this.state.clicked = true,
    });
  }

  componentWillUnmount() {
    this.refs.btn.removeEventListener('click', this.handleClick);
    this.setState({
      clicked: this.state.clicked = false,
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

这个问题是ESLint不断告诉我"this.refs"已经折旧了.

我该怎么做?如何修复它以便不使用折旧代码?

javascript reactjs

38
推荐指数
1
解决办法
2万
查看次数

在浏览器中打开 URL 时响应滚动到锚点

假设我有一个组件“Post”,它包含多个组件“Comment”。当我输入如下 URL 时,我想让该应用程序在带有该锚点的评论上向下滚动:

/post/:postId/#commentId
Run Code Online (Sandbox Code Playgroud)

我已经在工作 postId 路线/post/:postId

我尝试使用react-hash-link npm 包来实现它,但它没有按预期工作。

每个评论都有自己的 ID,该 ID 在组件上设置,如下所示:

<div class="post">
   <div class="post-header">
      <div class="post-header-avatar">
        SOME TEXT
      </div>
      <div class="post-header-info">
        SOME TEXT
      </div>
   </div>
   <div class="post-content">
      <span>POST CONTENT</span>
   </div>
   <div class="post-likers-container">
      <div class="post-likers-header label">People who like this post</div>
      <div class="post-likers">
          SOME TEXT
      </div>
   </div>
   <div class="post-comments">
      <div class="comments ">
         <div class="comments-all label">Comments</div>
         <div class="comments">
            <div class="comment" id="5d27759edd51be1858f6b6f2">
               <div class="comment-content">
               COMMENT 1 TEXT
               </div>
            </div>
            <div class="comment" id="5d2775b2dd51be1858f6b720">
               <div class="comment-content">
               COMMENT 2 TEXT
               </div>
            </div> …
Run Code Online (Sandbox Code Playgroud)

html javascript reactjs

7
推荐指数
1
解决办法
1万
查看次数

使用 TypeScript React Refs:无法读取未定义的属性“当前”

我正在使用 TypeScript 构建 React 应用程序。

我想创建按钮,滚动到主页上子组件的标题。

我已经在子组件中创建了一个引用,遵循此堆栈溢出答案,并(尝试)使用前向引用在我的父组件上访问它。

export class Parent extends Component {
  private testTitleRef!: RefObject<HTMLHeadingElement>;

  scrollToTestTitleRef = () => {
    if (this.testTitleRef.current !== null) {
      window.scrollTo({
        behavior: "smooth",
        top: this.testTitleRef.current.offsetTop
      });
    }
  };

  render() {
    return <Child ref={this.testTitleRef} />
  }
}

interface Props {
  ref: RefObject<HTMLHeadingElement>;
}

export class Child extends Component<Props> {
  render() {
    return <h1 ref={this.props.ref}>Header<h1 />
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我触发时,scrollToTestTitleRef我收到错误:

Cannot read property 'current' of undefined
Run Code Online (Sandbox Code Playgroud)

这意味着 ref 未定义。这是为什么?我究竟做错了什么?

编辑: Estus …

forward-reference typescript reactjs react-ref

6
推荐指数
1
解决办法
1万
查看次数

如何滚动到带有钩子/函数的元素?

我想再次问这个问题,但现在问我如何使用函数/钩子来实现这一点。

我尝试使用 useRef 然后访问偏移表单 current.offsetTop,但是在安装组件后我很难访问这个 ref。

function ScrollComponent(props) {
  const foo = false; //loading method
  let resultsRef = useRef();

  useEffect(() => {
    window.scrollTo({
      behavior: "smooth",
      top: resultsRef.current.offsetTop
    });
  }, [resultsRef]);

  if (foo)
    return (
      <div>
        <h4>Loading...</h4>
      </div>
    );
  return (
    <div ref={resultsRef}>
      <h4>content</h4>
    </div>
  );
}

Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我有一个名为 foo 的常量,它不需要附加此滚动引用,因为它会在加载内容时显示。

但是,在运行此代码时,我得到了无法读取未定义的属性 'offsetTop'

在我的 useEffect 方法中,我将依赖项指定为 resultsRef,因此我希望它仅在内容 div 加载时写入 resultsRef 时才被调用,但是,情况并非如此。

javascript reactjs

6
推荐指数
1
解决办法
1万
查看次数

Reactjs 滚动到大表单提交时的第一个错误

我正在使用 Material UI 和打字稿进行反应,并有一个表单。在表单提交时,如果输入有验证错误,我想滚动到第一个有验证错误的输入。我在下面粘贴了简单的表单代码,该代码在提交时在城镇输入中注入验证错误。实际上,错误可能存在于任何一个或多个输入中。

import React, { useState, FormEvent } from 'react';
import { Grid, TextField, Button } from '@material-ui/core';

const ScrollTest = () => {
  const [state, setState] = useState<{ town: string; county: string }>({
    town: '',
    county: '',
  });

  const [error, setError] = useState({ town: '', county: '' });

  const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
    const { name, value } = e.target;
    const errorVal = !value ? `${name} is requied` : '';
    setState({ ...state, [name]: …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs material-ui js-scrollintoview

4
推荐指数
1
解决办法
2万
查看次数

如何滚动到其他组件中的列表元素?

如何滚动到其他组件中的列表元素?

class Posts extends Components {
  render() {
    <ul>
     {this.props.posts.map((post) => 
        <li key={post.id}>{post.title}</li>
     )} 
    </ul>
  }

   //redux
}

class OtherComponent extends Components {
  onClickHandler = (id) => {
     //!!!!!!!!
     //scroll page to li with key={post.id}
  }

  render() {
    <div>
     {this.props.posts.map((post) => 
        <div key={post.id} onClick={() => this.onClickHandler(post.id)}>{post.title}</div>
     )} 
    </div>
  }

   //redux
}
Run Code Online (Sandbox Code Playgroud)

我在这里找到了解决方案:ReactJS how to scroll to an element

但都是针对单个元素的。

如果我有列表,我需要为每个人创建一个引用吗?帖子列表可以更改,所以我不能这样做。

javascript reactjs

2
推荐指数
1
解决办法
1万
查看次数

如何在react js中使用onClick滚动div?

大家好,我是 ReactJS 的新人。

我想滚动特定的 div 而不是窗口

          const handleScroll = (event) => {
      window.scrollBy(100, 0);
      }
Run Code Online (Sandbox Code Playgroud)

reactjs

-2
推荐指数
1
解决办法
7413
查看次数