3 回答

TA貢獻1853條經(jīng)驗 獲得超6個贊
第一個問題是您要向 div 添加 onScroll 事件。如果您在 div 內滾動,則會調用它。但實際上,您正在窗口中滾動。因此,您需要在窗口滾動上附加一個事件偵聽器。為此,您可以像這樣使用 useEffect 鉤子。
import React, { useState, useEffect } from "react";
import "./styles.css";
export default function App() {
? const [scrollNumber, updateScrollNumber] = useState(0);
??
? useEffect(() => {
? ? ? window.addEventListener("scroll", onScroll);
? ? ? return () => window.removeEventListener("scroll", onScroll);
? }, [scrollNumber]);
? const onScroll = () => {
? ? console.log("updating the scrollNumber");
? ? updateScrollNumber(scrollNumber + 12);
? };
? return (
? ? <div className="App" style={{ height: 200000 }}>
? ? ? {console.log({ scrollNumber })}
? ? ? <h1>Hello CodeSandbox</h1>
? ? ? <h2>Start editing to see some magic happen!</h2>
? ? </div>
? );
}

TA貢獻1773條經(jīng)驗 獲得超3個贊
import React, { useState, useEffect } from "react";
import "./styles.css";
export default function App() {
const [scrollNumber, updateScrollNumber] = useState(0);
const onScroll = () => updateScrollNumber((prevScroll) => prevScroll + 12);
useEffect(() => {
document.addEventListener("scroll", onScroll);
return () => window.removeEventListener("scroll", onScroll);
}, []);
return (
<div onScroll={onScroll} className="App" style={{ height: 200000 }}>
{console.log({ scrollNumber })}
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}

TA貢獻1799條經(jīng)驗 獲得超9個贊
問題是你在 div 中使用了 onSroll 。如果你想能夠在 div 內部做到這一點;將其屬性溢出設置為滾動。如果你想讓它在窗口滾動上工作;添加一個事件監(jiān)聽器。
這應該有效:
import React, { useState, useEffect } from "react";
import "./styles.css";
export default function App() {
const [scrollNumber, updateScrollNumber] = useState(0);
const onScroll = () => updateScrollNumber(scrollNumber + 12);
useEffect(() => {
window.addEventListener("scroll", onScroll)
return () => window.removeEventListener("scroll", onScroll)
})
return (
<div
onScroll={onScroll}
className="App"
style={{ height: 200000}}
>
{console.log({ scrollNumber })}
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
添加回答
舉報