useEffect
;deps
передаете пустой массив;const PageSize = () => {
const [pageSize, setPageSize] = useState([document.documentElement.scrollWidth, document.documentElement.scrollHeight]);
const updatePageSize = () => setPageSize([document.documentElement.scrollWidth, document.documentElement.scrollHeight]);
useEffect(() => {
window.addEventListener('resize', updatePageSize);
return () => {
window.removeEventListener('resize', updatePageSize);
};
}, []);
return (
<div>
<p>page width is {pageSize[0]}</p>
<p>page height is {pageSize[1]}</p>
</div>
);
};
mousemove
. Приложение работает, всё хорошо, но потом, по некоторой причине, происходит размонтирование и через некоторое время снова монтирование. В таком случае, если не удалить прослушку, будет уже 2 события, что и является утечкой памяти.const Button = ({ children, callback, ...props }) => {
return <MainButton {...props} onPress={callback}>{children}</MainButton>;
};
<>
{cart.map(item => (
<div className="catalog-mobile__counter" key={item.product._id}>
<button className="catalog-mobile__minus"></button>
<input type="text" defaultValue={item.quantity || ''} />
<button className="catalog-mobile__plus"></button>
</div>
))}
</>
const handle = el => {
setItems(items => items.map(item => item === el
? {
...item,
show: !item.show
}
: item
));
};
function Popup(props) {
- <img onClick={props.close} />
+ <img onClick={() => props.close('передали')} />
}
package.json
, или .eslintrc.json
(все варианты тут). Так же и с prettier. deleteItem = (id) => {
this.setState(({ toDoData }) => ({
toDoData: toDoData.filter(entry => entry.id !== id)
}));
}
useEffect
'ом отменяйте axios запрос.selectedPokemon
? const [selected, setSelected] = useState([]);
const toggleSelected = (option, checked) => {
if (multiSelection) {
setSelected(selected => checked
? [...selected, option.key]
: selected.filter(entry => entry !== option.key)
);
} else {
setSelected(checked
? [option.key]
: []
);
}
};
toggleSelected
не имело логики переключения, хотя по наименованию - должна была бы. То же самое было с setSelected
. Демка.const download = (name, blob) => {
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.setAttribute('href', url);
link.setAttribute('download', name);
link.addEventListener('click', () => {
setTimeout(() => {
URL.revokeObjectURL(url);
});
});
link.click();
};
case ADD_CATEGORY:
addCategory(
- state,
+ newState,
action.category
);
break;
let newState = { ...state };
.