PropTypes.defaultProps для функции в компоненте без сохранения состояния - PullRequest
0 голосов
/ 02 августа 2020

Проблема

У меня есть функциональный компонент, который может получить дополнительную функцию в качестве опоры. Я использую propTypes для определения непропорциональных значений свойств по умолчанию. Есть ли способ определить значение функции по умолчанию (в defaultProps) для функции компонента especifi c?

Код

export default function Cropper(props) {
   ...
   const handleOnCrop = () => { // <-------
      // Stuff
   }
   ...

   const handleConfirm = () => {
      if (!isCropping) {
          setIsCropping(true);
          cropPhoto().then((croppedPhoto) => {
            onCrop(croppedPhoto); // <----------------
            InteractionManager.runAfterInteractions(() => {
              setIsCropping(false);
            });
          });
       }
    };
}

PropTypes

Cropper.propTypes = {
  navigation: PropTypes.object.isRequired,
  photo: PropTypes.object.isRequired,
  onCrop: PropTypes.func.isRequired,
};

Cropper.defaultProps = {
  onCrop: // This has to be the functional component function "handleOnCrop" <--------
}; 

Подход к решению

Cropper.defaultProps = {
  onCrop: (photo, navigation) => { // <---------- Passing the navigation object from the component is not really good
    navigation.navigate("PostCreator", {
      photo,
    });
  },
};

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

1 Ответ

0 голосов
/ 02 августа 2020

Если я правильно понял, вам нужно express тип, который не является одним из доступных экспортов PropType (object, fun c, arrayOf et c.). Если это так, я вижу некоторые решения, они зависят от того, насколько c вам нужны ваши PropTypes.

PropTypes.instanceOf

https://github.com/facebook/prop-types#usage

Взгляните на закрепленный раздел по URL-адресу. В этом примере вы можете найти следующий фрагмент:

  // You can also declare that a prop is an instance of a class. This uses
  // JS's instanceof operator.
  optionalMessage: PropTypes.instanceOf(Message),

Я думаю, вы могли бы повторно использовать его в своем случае, если у вас есть действительный экспорт / импорт

 the functional component function "handleOnCrop"

, как вы упомянули.

Это, безусловно, наиболее специфичный тип c пропов, о котором я могу думать прямо сейчас. Давайте рассмотрим некоторые другие решения.

Если вы согласны немного обобщить опору, вы можете прибегнуть к

PropTypes.node

, который описан следующим образом из URL-адреса, упомянутого выше:

// Anything that can be rendered: numbers, strings, elements or an array
  // (or fragment) containing these types.
  optionalNode: PropTypes.node,

Мое наименее любимое решение,

PropTypes.any

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

Это ответ, основанный на моем понимании вашего вопроса, не стесняйтесь оставлять комментарий, чтобы объяснить его дальше.

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