gpt4 book ai didi

javascript - react 滚动组件以查看溢出隐藏元素内部

转载 作者:行者123 更新时间:2023-11-30 11:16:20 35 4
gpt4 key购买 nike

我有一个包含一系列项目的列表,但我无法让它将另一个项目滚动到 View 中。 this 等解决方案不太管用,因为我必须上下滚动(基本上,如果列表太大,请每隔一段时间滚动一次以显示所有项目)。

我做了一个codepen这说明了 react-scroll-to-component 的问题,但我对任何库/ native 解决方案持开放态度。基本功能就是 scrollToComponent(ref, <options>) .

据我所知,错误是它试图在主体上滚动,而不是在实际的容器上滚动。如果您删除 div 的高度/溢出属性,它将起作用。

不起作用:

<div
style={{
height: `200px`,
overflow: "hidden"
}}
>
{this.state.items.map(item => (
<Item ref={inst => (this[`ref_${item}`] = inst)} item={item} />
))}
</div>

作品:

<div>
{this.state.items.map(item => (
<Item ref={inst => (this[`ref_${item}`] = inst)} item={item} />
))}
</div>

所有不想去 codepen 的人的完整代码:

class Item extends React.Component {
render() {
return <div style={{ padding: `12px` }}>Item {this.props.item}</div>;
}
}

class List extends React.Component {
state = {
items: [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
]
};

componendDidMount() {
this.state.items.forEach(item => (this[`ref_${item}`] = React.createRef()));
}

onClick = () => {
scrollToComponent(this.ref_20);
};

render() {
const { items } = this.state;
return (
<div>
<h1>My List</h1>
<button onClick={this.onClick}>Clickidy</button>
{/*Replace with <div> to see it work*/}
<div
style={{
height: `200px`,
overflow: "hidden",
backgroundColor: "red"
}}
>
{this.state.items.map(item => (
<Item ref={inst => (this[`ref_${item}`] = inst)} item={item} />
))}
</div>
</div>
);
}
}

最佳答案

我将为您提供一个简单的修复方法,但这就是它的工作原理。您需要将包含所有元素的 div 的溢出设置为 scroll。这是因为如果将其设置为隐藏,则所有无法放入该 div 的元素都会被隐藏。我为您提供的解决方案甚至不需要使用 react-scroll-to-component 或任何包。

import React from "react";
import { render } from "react-dom";

class Item extends React.Component {
render() {
const { item } = this.props;
return (
<div style={{ padding: `12px` }} id={item}>
Item {item}
</div>
);
}
}

class List extends React.Component {
state = {
items: [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
]
};


onClick = () => {
/** You can avoid using getElementById if you can get the div rendered by Item component using refs.
* You can look at refs forwarding and other technics to see how you can solve this */
const divToScrollTo = document.getElementById(`${this.ref_20.props.item}`);
if (divToScrollTo) {
divToScrollTo.scrollIntoView();
}
};

render() {
const { items } = this.state;
return (
<div>
<h1>My List</h1>
<button onClick={this.onClick}>Clickidy</button>
<div
style={{
height: `200px`,
overflow: "scroll",
backgroundColor: "red"
}}
>
{this.state.items.map(item => (
<Item ref={inst => (this[`ref_${item}`] = inst)} item={item} />
))}
</div>
</div>
);
}
}

或者您可以点击下方链接获取码笔解决方案 https://codesandbox.io/s/2vo0j2w660

我没有做您的代码所需的更多优化,因为我时间不多,但希望这会有所帮助

如果您使用 refs 转发,就更容易了,如代码笔所示 https://codesandbox.io/s/yjj66xl2v1但是你必须在构造方法中创建 refs`

关于javascript - react 滚动组件以查看溢出隐藏元素内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51403628/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com