Перше, на що слід звернути увагу, це те, що функціональні компоненти без громадянства не можуть мати методів, ви не повинні розраховувати на виклик update
або draw
на надання, Ball
якщо це функціональний компонент без стану.
У більшості випадків вам слід оголосити функції поза функцією компонента, тому ви оголошуєте їх лише один раз і завжди використовуєте одне і те ж посилання. Коли ви оголошуєте функцію всередині, кожен раз, коли компонент відображається, функція буде визначена знову.
Бувають випадки, коли вам потрібно буде визначити функцію всередині компонента, щоб, наприклад, призначити її як обробник подій, яка поводиться по-різному залежно від властивостей компонента. Але все-таки ви можете визначити функцію зовні Ball
і прив'язати її до властивостей, зробивши код набагато чистішим і зробивши функції update
або draw
багаторазовими.
const update (propX, a, b) => { ... };
const Ball = props => (
<Something onClick={update.bind(null, props.x)} />
);
Якщо ви використовуєте хуки , ви можете використовувати, useCallback
щоб перевизначити функцію лише тоді, коли одна із залежностей ( props.x
у даному випадку) змінюється:
const Ball = props => {
const onClick = useCallback((a, b) => {
}, [props.x]);
return (
<Something onClick={onClick} />
);
}
Це неправильний шлях :
const Ball = props => {
function update(a, b) {
}
return (
<Something onClick={update} />
);
}
Під час використання useCallback
, визначення update
функції в самому useCallback
гачку нашого зовнішнього компонента стає дизайнерським рішенням більше, ніж будь-що, ви повинні враховувати, якщо ви збираєтеся повторно використовувати update
та / або якщо вам потрібно отримати доступ до області закриття компонента, наприклад, читати / писати в штат. Особисто я вирішив визначити його всередині компонента за замовчуванням і зробити його багаторазовим лише за потреби, щоб запобігти надмірному проектуванню з самого початку. Крім того, повторне використання логіки додатків краще робити за допомогою більш конкретних хуків, залишаючи компоненти для презентаційних цілей. Визначення функції поза компонентом під час використання хуків насправді залежить від ступеня роз'єднання з React, який ви хочете для вашої логіки програми.