Почему свойства в props.functionName нужно вызывать только иногда?

В React, конкретно ссылаясь на хуки/функциональную парадигму, когда вам нужно использовать props.functionName? Насколько я могу судить, если функции названы одинаково, вы можете опустить реквизиты следующим образом:

Родитель.js

...
<Child functionName = {functionName}/>
...

Ребенок.js

...
functionName();
...

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

Родитель.js

...
<Child otherName = {functionName}/>
...

Ребенок.js

...
props.otherName();
...

Я прав? Если да, то зачем использовать второй шаблон проектирования? (Возможно, просто для того, чтобы указать, что функция исходит от родителя и не определена на дочернем уровне. Или, может быть, по какой-то другой причине?)

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

innocent 20.03.2022 20:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
34
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Нет. Имя, которое вы используете, полностью зависит от того, как дочерний компонент обрабатывает переданные ему реквизиты. Как родительский компонент определяет, какое значение передать, совершенно не имеет значения.

Если реквизиты помещены в переменную с именем props, вам необходимо получить к ним доступ через объект, хранящийся в переменной.

const Child = (props) => {
    props.functionName();
    ...
}

Если первым аргументом является деструктурированный, то каждое свойство сохраняется в своей собственной переменной.

const Child = ({functionName}) => {
    functionName();
    ...
}

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

const Child = (props) => {
    const functionName = props.functionName();
    functionName();
    ...
}

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

Просто, например, скажем, что ваш родительский компонент имеет какое-то отношение к школе, и у вас есть:

const [studentId, setStudentId] = useState();
const [parentId, setParentId] = useState();

Но у вас также есть дочерний компонент для студентов, который ожидает поддержку id. Затем, чтобы передать ему studentId, вы должны сделать:

<Student id = {studentId} />

И в этом дочернем компоненте вы должны сослаться на него, выполнив props.id.

Вы бы не хотели делать

const [id, setId] = useState();

в родительском компоненте, а затем

<Student id = {id} />

при передаче его вниз, потому что тогда в родительском компоненте не будет ясно, к какому идентификатору относится это значение с отслеживанием состояния - вам, вероятно, придется добавить комментарий.

If so, why use the second design pattern?

Иногда, как в ситуации, которую я только что описал, дочерний компонент не разработан с учетом всех идентификаторов, используемых в родительском компоненте, что вполне разумно, именно это позволяет многим вещам в программировании быть модульными (и адаптируемыми и полезными). ). В результате иногда вам нужно, чтобы реквизит или переменная имели одно имя в родительском компоненте, а другое — в дочернем компоненте, что требует

<Child otherName = {functionName}/>

подход.

Ложь, это разрушает реквизиты в React;

Разрушение — это удобный способ извлечения нескольких значений из данных, хранящихся в (возможно, вложенных) объектах и ​​массивах.

реквизит — это объект, поэтому мы можем использовать деструктурирование.

Деструктуризация дает доступ к использованию реквизита в более читаемом формате и устраняет необходимость в реквизитах для каждого свойства.

<Child functionName = {functionName}  name = {name}/>;
const child = (props)=>{
    // you need to write props.functionName
    props.functionName();
    const thisName = props.name
};

const child =({functionName,name})=>{
    // you dont need to write *props.*
    functionName();
    const thisName = name 
};

Другие вопросы по теме