Reactjs 检查主题,否则在样式化组件中使用值

Reactjs 检查主题,否则在样式化组件中使用值,reactjs,styled-components,Reactjs,Styled Components,有没有一种简单、干净的方法可以做到这一点?我有一个ReactJS模块,我已经编译到我们的存储库中。我需要这个模块使用默认的颜色和样式,从它自己,除非它是在一个ReactJS应用程序是消费模块,该应用程序有一个主题提供商设置 我在想 color:${props=>props.theme?props.theme.primaryColor:'#333'} 我认为这会起作用(现在就试用),但是有没有更简单、更干净的方法来处理共享组件?我会在我的组件中遇到很多这样的情况,感觉有很多不必要的工作。在上下文A

有没有一种简单、干净的方法可以做到这一点?我有一个ReactJS模块,我已经编译到我们的存储库中。我需要这个模块使用默认的颜色和样式,从它自己,除非它是在一个ReactJS应用程序是消费模块,该应用程序有一个主题提供商设置

我在想

color:${props=>props.theme?props.theme.primaryColor:'#333'}


我认为这会起作用(现在就试用),但是有没有更简单、更干净的方法来处理共享组件?我会在我的组件中遇到很多这样的情况,感觉有很多不必要的工作。

在上下文Api中包装整个应用程序 然后u将为所有组件提供上下文中的道具 因此,您可以在整个应用程序中使用它们,而无需将数据作为所有组件的道具传递

  • 首先在单独的文件中使用React.createContext()创建上下文

  • 然后将所需的数据存储在此文件中。 -在上下文文件中创建withContext函数

     export default function withContext(Component) {
    return function ContextComponent(props) {
    
      return (
        <Context.Consumer>
          {context => <Component {...props} context={context} />}
        </Context.Consumer>
      );
    }
    
    使用上下文导出默认函数(组件){
    返回函数ContextComponent(道具){
    返回(
    {context=>}
    );
    }
    
    }

然后像这样将应用程序包装到提供者中

import withContext from './Context'
import App from './App';

const AppWithContext = withContext(App);
     <Provider>
    <AppWithContext />
    </Provider>
import with Context from./Context'
从“./App”导入应用程序;
常量AppWithContext=withContext(App);

我希望这对您有所帮助,但这是将数据传递给所有组件的最佳方式

在上下文Api中包装您的整个应用程序 然后u将为所有组件提供上下文中的道具 因此,您可以在整个应用程序中使用它们,而无需将数据作为所有组件的道具传递

  • 首先在单独的文件中使用React.createContext()创建上下文

  • 然后将所需的数据存储在此文件中。 -在上下文文件中创建withContext函数

     export default function withContext(Component) {
    return function ContextComponent(props) {
    
      return (
        <Context.Consumer>
          {context => <Component {...props} context={context} />}
        </Context.Consumer>
      );
    }
    
    使用上下文导出默认函数(组件){
    返回函数ContextComponent(道具){
    返回(
    {context=>}
    );
    }
    
    }

然后像这样将应用程序包装到提供者中

import withContext from './Context'
import App from './App';

const AppWithContext = withContext(App);
     <Provider>
    <AppWithContext />
    </Provider>
import with Context from./Context'
从“./App”导入应用程序;
常量AppWithContext=withContext(App);

我希望这对您有所帮助,但这是将数据传递给您可能使用的所有组件的最佳方式。我不确定这是我想要的。我知道我可以使用ThemeProvider将主题传递给组件。但是我不想要求ThemeProvider,我希望模块在没有提供提供程序时使用默认值。您的初始解决方案使用的是您要求的更简洁的方式。contextAPI是一个更干净的解决方案。样式化组件通过提供程序使用自己的上下文。。。然后我的组件就在本地,看不到道具钻孔是从哪里来的。你可以用。不确定这就是我要找的。我知道我可以使用ThemeProvider将主题传递给组件。但是我不想要求ThemeProvider,我希望模块在没有提供提供程序时使用默认值。您的初始解决方案使用的是您要求的更简洁的方式。contextAPI是一个更干净的解决方案。样式化组件通过提供程序使用自己的上下文。。。然后我的组件就在本地,看不到钻柱的位置。不确定这就是我要找的。我知道我可以使用
ThemeProvider
将主题传递给组件。但是我不想要求提供一个
ThemeProvider
,我希望模块在没有提供提供程序时使用默认值不确定这是我要找的。我知道我可以使用
ThemeProvider
将主题传递给组件。但我不希望需要
ThemeProvider
,我希望模块在未提供提供提供程序时使用默认值