React
- 10 ответов
- 0 вопросов
17
Вклад в тег
const [data, setData] = useState(null);
useEffect(() => {
const controller = new AbortController()
fetchData(controller.signal).then(setData)
return () => controller.abort()
}, [fetchData, setData])
const data = useMemo(() => array.map(mapper).filter(predicate).reduce(reducer), [array])
const handler = useCallback(() => {
// что-то сделать
}, [])
useEffect(() => {
handler(value)
// если не использовать useCallback, эффект будет срабатывать постоянно
}, [handler, value])
this.state = {
openedServiceFormIndex: -1,
};
clickServiceCard(index) {
this.setState(
prevState => {
if (index === prevState.openedServiceFormIndex) {
return {
openedServiceFormIndex: -1,
}
} else {
return {
openedServiceFormIndex: index,
}
}
}
);
}
render() {
<div className="service-list">
{serviceCards.map((card, index) => {
return (
<React.Fragment key={"service-card" + index}>
<ServiceCard
opened={index === this.state.openedServiceCardIndex}
clickServiceCard={() => this.clickServiceCard(index)}
extraClass="service-list__card"
/>
</React.Fragment>
);
})}
</div>
}
render() {
return (
<div className={cn("service-card", { "--opened": this.props.opened})}>
<button
className="service-card__btn"
onClick={this.props.clickServiceCard}
>
Кнопка
</button>
</div>
)}
}
Request0() {
// this.abort()
// можно делать это тут, если запрос должен быть только один, а можно в useEffect
this.abortController = new AbortController()
// fetch
finally {
this.abortController = null
}
}
abort() {
if (this.abortController) {
this.abortController.abort();
this.abortController = null
}
}