Как я могу использовать собственную тему с датами реагирования?
Я пытаюсь стилизовать свой react-dates
DayPickerRangeController
в Typescript, используя реакцию со стилями и Афродиту. Я использую этот код, эмулируя код из https://github.com/airbnb/react-dates:
const ThemedStyleSheet = require('react-with-styles/lib/ThemedStyleSheet').default
const aphroditeInterface = require('react-with-styles-interface-aphrodite').default
const DefaultTheme = require('react-dates/lib/theme/DefaultTheme').default
ThemedStyleSheet.registerInterface(aphroditeInterface)
ThemedStyleSheet.registerTheme(DefaultTheme)
// Importing react-dates after registering the theme, as per the docs.
import * as ReactDates from 'react-dates'
Однако, когда я запускаю это, я получаю эту ошибку времени выполнения в консоли:
Cannot read property 'createLTR' of undefined
TypeError: Cannot read property 'createLTR' of undefined
at Object.createLTR (http://localhost:6006/static/preview.bundle.js:133281:47)
at createStyles (http://localhost:6006/static/preview.bundle.js:9710:59)
at WithStyles.maybeCreateStyles (http://localhost:6006/static/preview.bundle.js:9805:22)
at WithStyles.componentWillMount (http://localhost:6006/static/preview.bundle.js:9739:20)
at callComponentWillMount (http://localhost:6006/static/preview.bundle.js:42214:16)
at mountClassInstance (http://localhost:6006/static/preview.bundle.js:42310:7)
at updateClassComponent (http://localhost:6006/static/preview.bundle.js:43679:9)
at beginWork (http://localhost:6006/static/preview.bundle.js:44320:16)
at performUnitOfWork (http://localhost:6006/static/preview.bundle.js:47152:16)
at workLoop (http://localhost:6006/static/preview.bundle.js:47181:26)
Я не получаю эту ошибку, когда:
Я использую
registerInterfaceWithDefaultTheme
функция из класса (хотя это не позволяет мне стилизовать компонент). (Это удивляет меня, потому что код вregisterInterfaceWithDefaultTheme
выглядит так же, как у меня (для меня по крайней мере))const aphroditeInterface = require('react-with-styles-interface-aphrodite').default const registerInterfaceWithDefaultTheme = require('react-dates/lib/utils/registerInterfaceWithDefaultTheme') .default registerInterfaceWithDefaultTheme(aphroditeInterface)
я использую
import 'react-dates/initialize';
(который в конечном итоге вызываетregisterInterfaceWithDefaultTheme
).
Я все еще получаю эту ошибку, когда:
- Меняю порядок регистрации темы и интерфейса
- Я добавляю
ThemedStyleSheet
код в верхней части моегоsrc/index
файл, в отличие от того же файла, который используетDayPickerRangeController
(Это предлагаемое исправление в /questions/15983746/ispolzovanie-reaktsii-so-stilem-dlya-stilizatsii-komponenta-datyi-reaktsii/15983751#15983751) - Я поместил точный код из https://github.com/airbnb/react-dates в Javascript, а затем импортировал его в свой файл Typescript, который использует
DayPickerRangeController
,
Я подтвердил в отладчике, что все мои импорты получают действительный код, а не, например, undefined
,
0 ответов
Это часто происходит, если вы используете несколько компонентов AirBnB (обычно подозреваемые включают в себя даты реакции и реостат), поскольку все они предлагают это (на мой взгляд) слегка хакерское решение для стилизации в своих документах.
Я уверен, если вы выполните поиск ThemedStyleSheet
в вашей кодовой базе вы обнаружите, что это не единственное место, где вы его используете. Также обратите внимание на различные вызовы инициализации компонентов AirBnB, которые, если они запускаются после вашего кода, перезапишут вашу тему и поставщика и вызовут дополнительные проблемы. Я сказал, что это взломано...
Вы должны поднять все ThemedStyleSheet
связанная логика от всей вашей кодовой базы до самого верха, где она должна вызываться только один раз с комбинированной соответствующей темой, прежде чем что-либо еще будет загружено. (См. Эту проблему на github: https://github.com/airbnb/rheostat/issues/179)