اپلیکیشنهای React از مجموعهای از کامپوننتها تشکیل شدهاند که بهصورت درختی سازماندهی میشوند. اگرچه معمولاً کامپوننتها را بهصورت تگ بسته استفاده میکنیم، React اجازه میدهد از تگ باز و بسته استفاده کنیم — قابلیتی که به آن ترکیب کامپوننتها گفته میشود.
بهجای ارسال پراپ label، میتوان محتوا را بین تگهای کامپوننت قرار داد:
<InputWithLabel ...>
Search:
</InputWithLabel>درون کامپوننت، این محتوا از طریق پراپ children قابل دسترسی است:
const InputWithLabel = ({ id, value, onInputChange, children }) => (
<>
<label htmlFor={id}>{children}</label>
<input id={id} value={value} onChange={onInputChange} />
>
);این روش امکان تزریق رشته، عناصر HTML یا حتی کامپوننتهای React را فراهم میکند.
برای فوکوس خودکار روی فیلد ورودی، میتوان از ویژگی autoFocus استفاده کرد:
<input autoFocus />برای کنترل این رفتار از بیرون، پراپ isFocused را تعریف میکنیم:
<InputWithLabel isFocused />و درون کامپوننت از آن استفاده میکنیم:
<input autoFocus={isFocused} />برای کنترل دقیقتر، میتوان فوکوس را بهصورت امری با useRef و useEffect انجام داد:
const inputRef = React.useRef();
React.useEffect(() => {
if (isFocused && inputRef.current) {
inputRef.current.focus();
}
}, [isFocused]);سپس ref را به عنصر ورودی متصل میکنیم:
<input ref={inputRef} ... />useRefref عنصر ورودیuseEffect برای اجرای فوکوس هنگام تغییر isFocusedref.current و اجرای focus()ترکیب کامپوننتها با پراپ children امکان طراحی رابطهای منعطف و قابل ترکیب را فراهم میکند. همچنین با استفاده از useRef میتوان به عناصر DOM بهصورت امری دسترسی داشت. این الگوها برای ساخت کامپوننتهای قابل استفاده مجدد، مقیاسپذیر و تعاملی در React ضروری هستند.