Я создаю новый проект с SSR, используя Next.js, MaterialUI и styled-components. Насколько мне известно, MaterialUI использует JSS в качестве инструмента для SSR (согласно example в своем репозитории). Интересно, знает ли кто-нибудь, как я могу заставить его работать со стилизованными компонентами. Я открыл проблемы в репозиториях MaterialUI и styled-components, оба автора ответили мне, что не знают, как заставить его работать вместе. Но, наверное, кто-нибудь это уже сделал? Или хотя бы подскажите, куда копать, чтобы решить эту проблему. Заранее спасибо!
MaterialUI вместе со стилями-компонентами, SSR
Ответы (4)
Вы можете использовать стилизованные компоненты с пользовательским интерфейсом материала, но в конечном итоге вам придется использовать !important
много. Нравится:
import Button from "material-ui/Button"
const MyButton = styled(Button)`
background: red !important;
`
В проекте, над которым я работаю с той же комбинацией, я только что прибег к использованию материала в стиле JSS - пользовательский интерфейс хочет, чтобы вы использовали весь withStyles
HOC ..
Вы можете проверить их документы здесь https://material-ui.com/guides/interoperability/#styled-components, вы можете проверить раздел более глубоких элементов, если хотите переопределить определенные классы https://material-ui.com/guides/interoperability/#deeper-elements
ниже мой пример, где для компонента переключателя
const StyledSwitch = styled(({ ...other }) => (
<div>
<Switch
{...other}
classes={{ colorSecondary: 'colorSecondary', checked: 'checked', bar: 'bar' }}
/>
</div>
))`
& .colorSecondary.checked + .bar {
background-color: ${props => props.theme.lighter.toString()};
}
& .colorSecondary.checked {
color: ${props => props.theme.default.toString()};
}
`;
export default StyledSwitch;
использование
<StyledSwitch theme={lightTheme.secondary} />
здесь используется тема, но вы можете указать любой цвет, который хотите
Похоже, у нас есть 3 способа (может быть проще, но не все - цветы) переопределить стили пользовательского интерфейса материала с помощью стилизованных компонентов. Вот мой Gist.
Я так делаю:
В головном компоненте приложения:
const styleNode = document.createComment('insertion-point-jss')
document.head.insertBefore(styleNode, document.head.firstChild)
const generateClassName = createGenerateClassName()
const jss = create({
...jssPreset(),
insertionPoint: 'insertion-point-jss'
})
<JssProvider jss={jss} generateClassName={generateClassName}>
<Main />
</JssProvider>
а затем просто стиль:
import styled from 'styled-components'
import Select from '@material-ui/core/Select'
import Input from '@material-ui/core/Input'
import React from 'react'
export const InputM = styled(({ ...other }) => (
<Input {...other} classes={{ input: 'input' }} />
))`
color: ${p => p.theme.textColor};
& .icon {
font-family: ${p => p.theme.fontFamily};
font-size: ${p => p.theme.fontSize}px;
color: ${p => p.theme.textColor};
}
`