instance.getChildContext не является функцией - PullRequest
0 голосов
/ 07 ноября 2018

Когда я обновил style-compnent с 2.1.2 до 4.0.2. Я получаю следующую ошибку. Я не нашел альтернативы, чтобы получить контекст. Как передать пароль и если это невозможно с текущим человеком, как вернуть .dive без передачи контекста.

enter image description here

1 Ответ

0 голосов
/ 27 января 2019

Ключ в том, что styled-components 2.x.x поддерживает React v0.14, но 4.x.x переключается на React v16.3. Вот цитата из их doc :

  • v2.x (React v0.14 +): IE9 +, все вечнозеленые браузеры
  • v3.x (React v0.14 +): IE9 +, все вечнозеленые браузеры
  • v4.x (React v16.3 +): IE11, IE 9+ (с полифилами Map + Set), все вечнозеленые браузеры

React изменил свой API контекста, и теперь у него нет метода getChildContext(), который возвращал объект контекста. Вы можете узнать больше о новом React Context API здесь

Поскольку ThemeProvider имеет theme prop (именно так вы передаете объект темы в него), если вы не хотите переписывать много кода, вы можете просто изменить getChildContext() на props.theme. В противном случае вам лучше использовать подход рекомендуемый от jest-styled-components и писать следующим образом, передавая вашу тему непосредственно вашему компоненту:

const wrapper = shallow(<Button theme={theme} />)

где, например

const Button = styled.button`
  color: ${props => props.theme.main};
`

const theme = {
  main: 'mediumseagreen',
}
...