Вызов instance () для поверхностного визуализированного функционального компонента возвращает ноль - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть следующий функциональный компонент React, который принимает имя как пропеллер

const Name = ({ name }) => <h1>{name}</h1>;

Name.propTypes = {
    name: PropTypes.string.isRequired
}

И мой тест выглядит следующим образом

describe("<Name />", () => {
    it("accepts name as a prop", () => {
        const wrapper = shallow(<Name name="Monkey D Luffy"/>);
        expect(wrapper.instance().props.name).toBe("Monkey D Luffy");
    })
})

Это возвращает следующую ошибку

TypeError: Невозможно прочитать свойство 'props' с нулевым значением

Update

Я вызываю компонент Name следующим образом

class Person extends React.Component {
  state = {name: "Name here"}
  render () {
     return  <div><Name name={this.state.name} /></div>
  }
}

Я обнаружил, что вызов instance() для компонента без состояния не будет работать с реакцией 16. * Я не могу использовать wrapper.prop() в моем случае, так как он возвращает только реквизиты корневого узла

Почему этовозвращать нуль при вызове функции экземпляра для визуализированного компонента и как мне проверить реквизиты, переданные в компонент без состояния?

Оригинальный вопрос

Почему он возвращает ноль при вызове экземплярафункция на визуализируемом компоненте

1 Ответ

0 голосов
/ 15 декабря 2018

instance() === null для функционального компонента, потому что функциональные компоненты не имеют экземпляров.

Для доступа к компонентам компонента должен использоваться собственный API фермента:

expect(wrapper.prop('children')).toBe("Monkey D Luffy");

Как ссылка поясняет,

Чтобы вернуть реквизиты для всего компонента React, используйте wrapper.instance (). Props.Это действительно для компонентов с состоянием или без состояния в React 15. .Но wrapper.instance () вернет значение NULL для компонента React без состояния в React 16. , поэтому в этом случае wrapper.instance (). Props вызовет ошибку.

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