Передача функции в качестве поддержки в другом компоненте

#javascript #reactjs #react-native #rxjs #react-router

#javascript #reactjs #реагировать — родной #rxjs #реагировать-маршрутизатор

Вопрос:

Я пытаюсь передать функцию внутри компонента в качестве поддержки другому компоненту.

У меня есть следующее:

 // Parent Component
import React, { useState } from 'react';
const IncrementingCount = () => (
   const [count, setCount] = useState(0)
   const increment = () => {
     return setCount(count  1)
   };
   <ul>
     <li>
       My count:{count} <IncreaseCount onclick={IncrementingCount} />
     </li>
   </ul>
)
    
//Child component
import React from 'react'
const IncreaseCount = (IncrementingCount) => {
  return (
    <button onClick={IncrementingCount}> Click Me </button> 
  );
};
  

Я совершенно новичок в React.

Комментарии:

1. Пожалуйста, ознакомьтесь с документацией reactjs.org/docs/handling-events.html

2. это просто пример, чтобы узнать, как передать функцию в качестве реквизита, или это реальный код?

Ответ №1:

Здесь есть пара синтаксических проблем.

Я предлагаю вам ознакомиться с основами react здесь, чтобы убедиться, что вы твердо придерживаетесь основных принципов. https://reactjs.org/tutorial/tutorial.html

IncreaseCount — это ваш дочерний компонент, поэтому вам нужно передать что-то в его реквизит, указав атрибут. Их можно назвать как угодно, но я бы предпочел избегать значений по умолчанию, таких как onclick, поскольку они используются для кнопок html. (если только ваш компонент не является кнопкой или не имеет поведение, подобное кнопке). Здесь я думаю, что хорошим именем было бы onIncrementCount или что-то подобное.

Значение внутри onIncrementCount={VALUE} — это то, что вы передаете. Таким образом, это должна быть функция, которая увеличивает количество. Я снова переименовал это — хороший шаблон — это реквизит для использования on-prefix, а для обработчиков — для использования handle-prefix .

   <IncreaseCount onIncrementCount={handleIncrementCount} />
  
 const IncrementingCount = () => (
  const [count, setCount] = useState(0)

  // This is the handler function you'll pass to your child IncreaseCount component
  const handleIncrementCount = () => {
    return setCount(count  1)
  };

  <ul>
    <li>
      My count:{count} <IncreaseCount onIncrementCount={handleIncrementCount} />
    </li>
  </ul>
)

  

Наконец, в вашем дочернем компоненте — вы получаете доступ к функции через аргумент props. Здесь это имя, которое вы привязали к here <IncreaseCount onIncrementCount={handleIncrementCount} /> — onIncrementCount, поэтому вам нужно props.onIncrementCount .

 //Child component
import React from 'react'

const IncreaseCount = (props) => {
  return (
    <button onClick={props.onIncrementCount}> Click Me </button> 
  );
}
  

Комментарии:

1. Спасибо, я думаю, что я прыгнул глубоко, не зная, как плавать. Вы правы, я читаю о реквизите и пытаюсь его понять, и столкнулся с этой проблемой.

2. Не беспокойтесь — это легко сделать! Не могли бы вы принять ответ, если он решит вашу проблему?

Ответ №2:

Вам нужно передать increment ее в качестве опоры своему дочернему элементу, после чего вы сможете получить доступ к функции, используя props.onClick в дочернем элементе.

Доступ к каждому реквизиту, который вы передали компоненту, можно получить из props object .

 import React from  'react'

const IncrementingCount = () => {
  const [count, setCount] = React.useState(0)

  const increment = () => {
    return setCount(count  1)
  };

  return <ul>
    <li>
      My count:{count} <IncreaseCount onClick={increment} />
    </li>
  </ul>
}


const IncreaseCount = (props) => {
  return <button onClick={props.onClick}> Click Me </button> 
}

  

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

Комментарии:

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

2. не беспокойтесь — мы все были там! Без сомнения, вы слышали это миллион раз, но потратив время сейчас, вы сэкономите время в будущем

Ответ №3:

Проверьте это. https://codesandbox.io/s/stackoverflow64102251-j4eoi

Я исправил ваш код. Прочитайте документацию React или посмотрите учебные пособия Youtube. У вас впереди долгий путь.

 import React, { useState } from "react";

const IncrementingCount = () => {
  const [count, setCount] = useState(0);
  const increment = () => {
    return setCount(count   1);
  };

  return (
    <ul>
      <li>
        My count:{count}
        <IncreaseCount IncrementingCount={increment} />
      </li>
    </ul>
  );
};

//Child component
// import React from 'react'
const IncreaseCount = (props) => {
  const { IncrementingCount } = props;
  return <button onClick={IncrementingCount}> Click Me </button>;
};
  

Комментарии:

1. Спасибо за разъяснение, я использовал 2 компонента отдельно.