Используется ли трехточечный синтаксис для распространения реквизита в React SEPARATE на оператор распространения в контексте выражения JavaScript? - PullRequest
0 голосов
/ 08 ноября 2019

Я знаком с синтаксисом распространения JavaScript:

obj1 = {x: 1, y: 2, z: 3 }
obj2 = {...obj1}
console.log(JSON.stringify(obj1) == JSON.stringify(obj2)) // true

В синтаксисе React JSX я часто вижу то, что выглядит как синтаксис распространения:

props = {x: 1, y: 2, z: 3}
<SomeComponent {...props} />

Что, как я знаю, примерно равно

SomeComponent({x: 1, y: 2: z: 3})

Что по сути является реквизитом бурения. ОДНАКО, я также знаю, что JSX позволяет указывать выражения JavaScript в фигурных скобках. Но НЕ, по-видимому, как характеристики недвижимости? Тогда кажется, что механизм сверления реквизита (то есть указание фигурных скобок в определении элемента JSX - <X {...props} /> против <X something={js expression} />), хотя он выглядит как операция обычного распространения, на самом деле это не так?

ЗаписьЯ уверен, что это так ... Но я бы хотел получить обратную связь, если я ошибаюсь!

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Да, вы правы. Однако не следует слепо использовать синтаксис распространения для передачи всего набора реквизитов от родительского компонента к дочернему компоненту, так как это приведет к следующему предупреждению:

Warning: Invalid value for prop `someProp` on <some> tag

Следовательно, вам следует толькопередать реквизит вам нужно. Вы все еще можете использовать синтаксис распространения для этой цели.

Например, если дочерний SomeComponent принимает только y и z для реквизита,

const { x, ...otherProps } = props;

return <SomeComponent {...otherProps} />
1 голос
/ 08 ноября 2019

Ваша интуиция верна: даже если синтаксис один и тот же, синтаксис "атрибутов распространения" является функцией JSX, как определено здесь Себастьяном Маркбаге (React core team) https://gist.github.com/sebmarkbage/07bbe37bc42b6d4aef81#jsx-spread-attributes

Наблюдение засловарный запас: «сверление» реквизита обычно является отрицательным термином, означающим, что вы пропускаете реквизит через чрезмерное количество компонентов, и обычно является запахом кода. Более нейтральным термином будет «прохождение» реквизита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...