TGViewer
Заметки про React Заметки про React @ru_react_notes · 3.43K subscribers
Post #452 3.35K
Предпочитайте несколько композиций

В своем блоге Кайл Шевлин предложил, что, если компонент имеет ограниченный набор вариантов обработки, то будет удобнее иметь четкие отдельные ветки if/else для каждого случая, а не распространять условные выражения повсюду в JSX. Сравните два примера:


function VideoControls() {
const { isPlaying, play, pause } = useVideoControls()

return (
<Button onPress={isPlaying ? pause : play}>
<Icon name={isPlaying ? 'pause' : 'play'} />
<Button.Text>{isPlaying ? 'Pause' : 'Play'}</Button.Text>
</Button>
)
}

function VideoControls() {
const { isPlaying, play, pause } = useVideoControls()

if (isPlaying) {
return (
<Button onPress={pause}>
<Icon name="pause" />
<Button.Text>Pause</Button.Text>
</Button>
)
}

return (
<Button onPress={play}>
<Icon name="play" />
<Button.Text>Play</Button.Text>
</Button>
)
}


Хоть и во втором примере больше кода, он более читабельный. По мере усложнения проекта уменьшается скорость чтения кода, наличие условных операторов особенно усложняет понимание кода. Во втором примере вместо трех условных операторов используется только один условный оператор. Код стал понятнее и менее подвержен багам.

https://kyleshevlin.com/prefer-multiple-compositions/
Kyle Shevlin's Blog Prefer Multiple Compositions | Kyle Shevlin The flexibility of JavaScript and React means there are lots of ways to achieve the same result. Let's consider why we might choose one way over another when it comes to React. Specifically, when to choose a more verbose solution with composition over the…
  • 👍 34
  • 👎 4
More from @ru_react_notes
  1. Jun 24, 2025Реактивность – это легко Стандартный useContext заставляет обновляться все компоненты-потр…
  2. Jun 17, 2025Остерегайтесь скрытых проблем при работе с search params Типо-безопасность — это только ве…
  3. Jun 4, 2025Почему Error Boundary, а не просто try/catch для компонентов В React нельзя использовать t…
  4. May 29, 2025Анонс TypeScript Native Вышла превью версия TypeScript написанная на Go. Ее можно установи…
  5. May 27, 2025Управление фокусом в React с помощью flushSync Установить фокус на инпуте сразу в React мо…
  6. May 15, 2025TanStack DB TanStack представила новую библиотеку – TanStack DB – реактивный клиентский ст…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →