gpt4 book ai didi

javascript - 在 React 中无法保持粘性工作

转载 作者:行者123 更新时间:2023-12-02 14:28:07 25 4
gpt4 key购买 nike

我正在尝试使用 INK 的粘性 js 模块来工作。出于某种原因,事实并非如此。我还注意到,如果我采取 <div className="ink-sticky">
<div className="ink-alert basic">Hey I stick to the top when you scroll!</div>
</div>
退出我的 React 组件(当然将 className 更改为 class)并直接在我的 index.html 中过去,粘性效果很好。

http://ink.sapo.pt/javascript-ui/#InkUISticky_1

我的 react 组件:

const Content = Component({
render(){
var company = this.props.company;

return (
<div className='content padding-bottom-200 margin-top-50'>
<div className="column-group">
<div className="all-20">
<div className="ink-sticky">
<div className="ink-alert basic">Hey I stick to the top when you scroll!</div>
</div>
</div>

<div className="all-80">


</div>
</div>
</div>
)
}
})

export default Content;

当页面呈现时,我看到 ink-alert 已对我的 div 进行了样式设置,但 ink-sticky 没有执行任何操作。我已将 js 包含在我的 index.html 中,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/lib/ink-3.1.10/css/ink-flex.min.css">
<link rel="stylesheet" type="text/css" href="/lib/ink-3.1.10/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="/lib/css/master.css" />


</head>
<body>
<div class="wrap">
<div class="ink-grid">
<div id="app"></div>
<script type="text/javascript" src="/scripts/app.bundle.js"></script>
<script type="text/javascript" src="/lib/ink-3.1.10/js/ink-all.min.js"></script>
<script type="text/javascript" src="/lib/ink-3.1.10/js/autoload.min.js"></script>
</div>
</div>
</body>
</html>

这确实有效:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/lib/ink-3.1.10/css/ink-flex.min.css">
<link rel="stylesheet" type="text/css" href="/lib/ink-3.1.10/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="/lib/css/master.css" />


</head>
<body>
<div class="wrap">
<div class="ink-grid">
<div class="ink-sticky">
<div class="ink-alert basic">Hey I stick to the top when you scroll!</div>
</div>
<div id="app"></div>
<script type="text/javascript" src="/scripts/app.bundle.js"></script>
<script type="text/javascript" src="/lib/ink-3.1.10/js/ink-all.min.js"></script>
<script type="text/javascript" src="/lib/ink-3.1.10/js/autoload.min.js"></script>
</div>
</div>
</body>
</html>

最佳答案

这可能与以下事实有关:为了使元素具有粘性,ink-sticky 调用一些 JS 来实现这一点。现在,当页面刚刚呈现时,它会尝试通过类名称查找粘性元素并自动将其设置为粘性元素,但是您的粘性元素不在 HTML 中。它们被动态添加到 DOM 中。

这意味着,您必须告诉 ink 手动使某个元素变得粘性。

最合适的位置是在 componentDidMount 生命周期 Hook 中。

据我所知,Ink 确实有一个用于使元素粘性的 API:http://ink.sapo.pt/javascript/Ink.UI.Sticky/

理想情况下,该行为应该封装到它自己的组件中:

const Sticky = React.createClass({
componentDidMount() {
const el = ReactDOM.findDOMNode(this);
new Ink.UI.Sticky(el);
},

render() {
return <div>{this.props.children}</div>
}
});

这种方法用于将其他 UI 库与 React 连接起来,而不仅仅是这个。它也可用于 jQuery UI 和插件等。

关于javascript - 在 React 中无法保持粘性工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38048990/

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