Cud*_*nny 5 javascript reactjs material-ui
I am trying to use material-ui's useScrollTrigger with a target other than window like so:
export default props => {
let contentRef = React.createRef();
const scrollTrigger = useScrollTrigger({ target: contentRef.current });
return (
<React.Fragment>
<CustomHeader shrink={scrollTrigger} />
<div ref={contentRef}>
{props.children}
</div>
</React.Fragment>
);
};
Run Code Online (Sandbox Code Playgroud)
This causes an error to be thrown because contentRef.current is null when useScrollTrigger is called. What is the proper usage of this utility with child elements as a target?
你是对的,因为组件第一次呈现 contentRef.current 是空的,所以会抛出一个错误。
我们需要两件事,一个是对目标 Element 的引用,另一个是重新渲染以便再次计算 scrollTrigger。换句话说,我们需要一个状态。
以下代码将起作用
export default props => {
// please keep it undefined here to not make useScrollTrigger throw an error on first render
const [scrollTarget, setScrollTarget] = useState(undefined)
const scrollTrigger = useScrollTrigger({ target: scrollTarget });
return (
<React.Fragment>
<CustomHeader shrink={scrollTrigger} />
<div ref={node => {
if (node) {
setScrollTarget(node);
}
}}>
{props.children}
</div>
</React.Fragment>
);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |