Вавилонский переход к первому JSXElement - PullRequest
0 голосов
/ 05 августа 2020

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

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

Приведенный ниже атрибут никогда не добавляет атрибут

visitor: {
    JSXElement( path, state ) {
        if ( path.key === 0 )
        {
            path.node.openingElement.attributes.push(
                t.jSXAttribute(
                    t.jSXIdentifier( 'data-e2e' ),
                    t.stringLiteral( `${someValue}` )
                )
            );
        }
    }
}

Приведенная ниже ошибка показывает, что firstElem in undefined

visitor: {
    Program( path, state ) {
        let arr = [];

        path.traverse( {
            enter( jsxPath )
            {
                if ( jsxPath.node.type === 'JSXElement' )
                {
                    arr.push( jsxPath );
                }
            }
        } );
        let firstElem = arr[ 0 ];   <<< undefined
        firstElem.node.openingElement.attributes.push(
            t.jSXAttribute(
                t.jSXIdentifier( 'data-e2e' ),
                t.stringLiteral( `${someValue}` )
            )
        );

    }
}
}

Кто-нибудь может предложить, как получить только первый JSXElement.

1 Ответ

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

Так что я нашел ответ по чистой случайности. Я должен был добавить stop () сразу после обхода JSXElement

JSXElement( jsxPath )
      {
        jsxPath.stop(); 
    ...

Функция stop () не задокументирована, на самом деле ни один из Babel JS не будет задокументирован для новичка. . Обнаружил это, посмотрев на чей-то плагин и задавшись вопросом, что он там делал, и методом проб и ошибок решил, что указанная выше проблема решена.

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