在没有这种不良解决方法的情况下,可以将带样式的组件和react-redux与Theme HOC一起使用吗?

时间:2020-06-15 17:55:36

标签: reactjs redux react-redux styled-components

我们正在尝试将代码库从样式组件v3升级到v4 / 5。尽管看起来好像应该使用,但我们正在使用的模式似乎不再起作用。

模式(使用伪代码):

// In reusable component file

const LeafComponent = (props) => whatever
const StyledLeafComponent = styled(LeafComponent)` styles which might reference connect props here `
const ReusableComponent = connectOrWithTheme(StyledLeafComponent)

// In some other file where the reusable component is being customized

const CustomizedComponent = styled(ReusableComponent)` additional context-specific styles here `

在v4和v5中,此模式对于connect()和withTheme均失败,并且在可重用组件中未定义相应的道具(存储道具或主题)(来自connect()的道具在叶子中也未定义)组件的样式,我们可能需要在其中引用它们)。实际上,connect()中的mapStateToProps似乎根本没有运行!

以下只是在两者之间添加传递组件的变通办法似乎可以解决问题:

const CustomizedComponent = styled(props => <ReusableComponent {...props} />)` additional context-specific styles here `

但是这种解决方法的问题在于,很容易意外地遗漏并引入了偷偷摸摸的运行时错误,更不用说我们正在升级的代码库成为可能的运行时错误的雷区,直到我们对样式化的每种用法进行彻底的审查-与connect,withTheme以及其他可能的类似HOC(数量很多)一起使用的组件。 (我们使用的是TypeScript,因此编译器错误将很有价值)。

显然,最好的解决方案是将其固定在样式组件本身中,但目前似乎不太可能。我们花了几个月的时间来寻求比filing an issue against the styled-components repo on GitHubreaching out in Spectrum更好的答案。我们在codeandbox上简单清晰地复制了该问题:

没有回应。

是否有比上述方法更好的解决方法?还是我们所坚持的?首先我们是否会误导使用此模式,并且应该做其他事情?当然,样式化的组件,react和redux都是流行的库,并且被许多人一起使用。这必须已经遇到和解决。

0 个答案:

没有答案