Использование forwardRef с proptypes и eslint
Я пытаюсь использовать forwardRef для кнопки 9X_reactjs в проекте, используя eslint и prop-types.
Это то, что я пробовал 9X_react-jsx до сих пор, и каждый раз получаю ошибки:
Первая попытка
function Button ({ action = { callback: () => {}, title: 'unknown' } }, ref) { return () } Button.propTypes = { action: Action.isRequired } export default forwardRef(Button)
В 9X_react-proptypes консоли появится следующее предупреждение: Warning: forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?
Вторая попытка
function ButtonFunction ({ action = { callback: () => {}, title: 'unknown' } }, ref) { return () } const Button = forwardRef(ButtonFunction); Button.propTypes = { action: Action.isRequired } export default ButtonFunction;
Я 9X_javascript-library получаю: action is missing in props validation
.
Третья попытка
const Button = forwardRef(({ action = { callback: () => {}, title: 'unknown' } }, ref) => { return () }); Button.propTypes = { action: Action.isRequired } export default Button;
На этот раз я получаю: Component definition is missing display name
.
Итак, как 9X_eslint правильно это сделать?
Ответ #1
Ответ на вопрос: Использование forwardRef с proptypes и eslint
Вы почти закончили свою третью попытку. Но 9X_react вам не нужно использовать дважды forwardRef
, достаточно 9X_js первого использования с объявлением Button
. Правило 9X_react-jsx отображаемого имени не является ошибкой 9X_react-jsx (ни на уровне JavaScript, ни на уровне React), а 9X_javascript-library скорее преднамеренной опорой для отображения 9X_.js «настоящего» имени компонента, используемого 9X_react-jsx React в отладочных сообщениях. В вашем случае 9X_javascript функция forwardRef
скроет "настоящее" имя 9X_javascript-library компонента для транспилятора.
Вы даже можете 9X_react.js отключить это правило, если действительно 9X_eslint проблема написать displayName
для каждого из этих случаев.
https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
const Button = forwardRef(({ action = { callback: () => {}, title: 'unknown' } }, ref) => { return () }); Button.propTypes = { action: Action.isRequired } Button.displayName = 'Button' export default Button
- Я пробовал 30 минут, чтобы адаптировать ваш ответ, он работает, только если мы поставим тот же порядок, что и ...
Ответ #2
Ответ на вопрос: Использование forwardRef с proptypes и eslint
const Form = React.forwardRef(function Form( { submitHandler, keyUpHandler, label, type, placeholder, buttonTxt }, ref ) {
export default Form
В этом случае предупреждений нет.function Form
заботится 9X_react-proptypes об имени.
- Не могли бы вы объяснить, как работал этот ...
Ответ #3
Ответ на вопрос: Использование forwardRef с proptypes и eslint
interface SomeProps { // written your props }; const SomeFC = forwardRef((props:SomeProps,ref)=>{ // do something and returns }})
Объявление типа пропсов для внутреннего 9X_javascript FC может исправить предупреждение о проптипах!
-
2
-
2
-
1
-
1
-
4
-
4
-
2
-
2
-
6
-
6
-
4
-
2
-
5
-
4
-
4
-
7
-
1
-
2
-
1
-
1
-
1
-
1
-
2
-
3
-
2
-
12
-
2
-
6
-
13
-
1
-
2
-
3
-
3
-
6
-
3
-
6
-
10
-
6
-
3
-
2
-
4
-
2
-
3
-
1
-
3
-
7
-
1
-
9
-
1
-
12