const updateContent = throttle(() => {
let updating = true;
if (window.scrollY === 0) updating = true;
if ((window.scrollY + window.innerHeight) === document.body.clientHeight) {
if (updating) {
window.scrollTo({top: 0, behavior: 'instant'});
setCurrentPage(prevPage => {
console.log('UPDATED!!!');
return prevPage+1;
});
updating = false;
}
};
}, 300);
const updateContent = throttle(() => {
let updating = true;
if (window.scrollY === 0) updating = true;
if ((window.scrollY + window.innerHeight) === document.body.clientHeight) {
if (updating) {
window.scrollTo({top: 0, behavior: 'instant'});
setCurrentPage(prevPage => {
console.log('UPDATED!!!');
return prevPage+1;
});
updating = false;
}
};
}, 300);
Если бы у эффекта были зависимости (а они тут должны быть, просто пример не про это написан), то эффект выполнялся бы реже, чем на каждый рендер.
А вызывает её не эффект, а ChatAPI — представьте себе, что это некий document.addEventListener м обработчиком событий handleStatusChange. Эффект организует подписку и отписку.
import React from 'react';
import styled from 'styled-components';
const StyledButton = styled.button`
padding: 10px 20px;
font-size: 15px;
border: none;
background-color: #fff;
color: #000;
`;
const MainButton = ({children, onButtonClick}) => (
<StyledButton onClick={onButtonClick}>{children}</StyledButton>
);
export default MainButton;
import { useHistory, BrowserRouter as Router,
Switch,
Route,
Link
} from 'react-router-dom';
function App() {
return (
<Router>
<main>
<Header screenHandler={()=>{}} />
<Switch>
<Route exact path='/'>
<BlogScreen posts={Posts} />
</Route>
<Route path='/post'>
<PostScreen />
</Route>
<Route path='/edit'>
<EditScreen onAddPostClick={createNewPost} onSavePostClick={changePost} />
</Route>
</Switch>
</main>
</Router>
);
}
export default App;