Я реализовал этот компонент React Spring, который получает другой слайд после нажатия на него. Я хотел бы, чтобы он менялся автоматически каждые X секунд с помощью метода setInterval
.
Я пытался использовать setInterval
, но я не получаю желаемых результатов, потому что функция setInterval
вызывается несколько раз и с увеличением времени слайды начинают меняться как сумасшедшие, пока браузер не зависает.
Вот исходный проект codeandbox https://codesandbox.io/embed/1y3yyqpq7q
А вот код, который я Сейчас я работаю
import { useTransition, animated } from 'react-spring'
import clientStyles from '../../styles/modules_scss/clients.module.scss'
const pages = [
({ style }) => <animated.div style={{ ...style, background: 'lightpink' }}>Andres Mejias</animated.div>,
({ style }) => <animated.div style={{ ...style, background: 'lightblue' }}>Andres Urdaneta</animated.div>,
({ style }) => <animated.div style={{ ...style, background: 'lightgreen' }}>Gustavo Abdelnour</animated.div>,
]
export default function SlideTransition() {
const [index, set] = useState(0)
const onClick = useCallback(() => set(state => (state + 1) % 3), [])
const transitions = useTransition(index, p => p, {
from: { opacity: 0, transform: 'translate3d(100%,0,0)' },
enter: { opacity: 1, transform: 'translate3d(0%,0,0)' },
leave: { opacity: 0, transform: 'translate3d(-50%,0,0)' },
})
return (
<div className={clientStyles.simpleTransMain} onClick={setInterval(onClick, 3000)}> //Here's my approach
{transitions.map(({ item, props, key }) => {
const Page = pages[item]
return <Page key={key} style={props} />
})}
</div>
)
}
Лучший результат, который я получил, заключался в том, что я обернул setInterval
в анонимную функцию и ПОСЛЕ того, как щелкнул первый слайд, я получаю новый слайд каждые 3000ms
. Я хочу, чтобы это происходило без необходимости нажимать на слайд, как только страница загрузится.
onClick={() => { setInterval(onClick, 3000) }}