GVKun编程网logo

如何在React应用程序中使用CSS模块应用全局样式?(react css)

16

对于想了解如何在React应用程序中使用CSS模块应用全局样式?的读者,本文将是一篇不可错过的文章,我们将详细介绍reactcss,并且为您提供关于javascript–如何使用webpack在Rea

对于想了解如何在React应用程序中使用CSS模块应用全局样式?的读者,本文将是一篇不可错过的文章,我们将详细介绍react css,并且为您提供关于javascript – 如何使用webpack在React应用程序中异步需要模块?、reactjs – 使用React Router在Redux React应用程序中传递道具、reactjs – 在React Redux应用程序中使用OAuth2刷新令牌、reactjs – 在React-Redux应用程序中使用OpenID Connect SSO的有价值信息。

本文目录一览:

如何在React应用程序中使用CSS模块应用全局样式?(react css)

如何在React应用程序中使用CSS模块应用全局样式?(react css)

我目前正在使用带有React的CSS模块进行样式设计。因此,我的每个组件都在其特定于组件的css文件中导入,如下所示:

import React from ''react'';import styles from ''./App.css'';const example = () => (  <div className={styles.content}>    Hello World!  </div>);export default example;

在设置单个组件的样式时,这种方法很好用,但是如何应用不是组件特定的全局样式(html,body,header标签,div等)?

答案1

小编典典

由于您使用的是ES6导入语法,因此可以使用相同的语法导入样式表

import ''./App.css''

另外,您可以使用:global来包装您的类以切换到全局范围(这意味着CSS模块不会对其进行调制,例如:在其旁边添加随机ID)

:global(.myclass) {  background-color: red;}

javascript – 如何使用webpack在React应用程序中异步需要模块?

javascript – 如何使用webpack在React应用程序中异步需要模块?

在React应用程序中,我想只为某个路径/路径导入一个名为flowtime.js的库,然后再执行一些代码.该库有一个名为Brav1toolBox的依赖项.在npm上都没有.

我的策略是在Component的componentDidMount方法中使用webpack的require.这是我的尝试:

componentDidMount() {
  require.ensure([ 'local/relative/path/to/lib/brav1toolBox.js'],function(require) {
    var f = require('local/relative/path/to/other/lib/Flowtime.js/js/flowtime.js');
  });
}

这会导致以下错误.

Uncaught (in promise) ReferenceError: Brav1ToolBox is not defined

所以正在加载Flowtime但无法找到Brav1ToolBox.

我对React或webpack都没有经验,所以也许我有一个误解.我试图使用webpack只加载那些库,如果我的用户访问需要这些库的路径. This is the webpack guide我用作参考.

感谢您的帮助.

解决方法

这取决于你的webpack版本,但你在正确的轨道上进行代码拆分/路由分块.

对于webpack v2,我建议查看Webpack documentation.

使用webpack 2,您可以在需要它们的反应容器/组件中需要库,然后根据路径动态加载代码.您可以通过两个示例路由使用react-router执行此操作的示例,例如: “/ home”和“/ about”,如下:

<Route path="/home" getComponent={(nextState,callback) => {
    require.ensure([],require => {
        callback(null,require("./containers/home"));
    },"Home");
}} />
<Route path="/about" getComponent={(nextState,require("./containers/about"));
    },"About");
}} />

reactjs – 使用React Router在Redux React应用程序中传递道具

reactjs – 使用React Router在Redux React应用程序中传递道具

这是我的入口点文件:

import React,{ PropTypes } from ''react''
import ReactDOM from ''react-dom''
import { createStore,combineReducers } from ''redux''
import { Provider } from ''react-redux''
import createbrowserHistory from ''history/lib/createbrowserHistory''
import { Router,Route } from ''react-router''
import { syncReduxAndRouter,routeReducer } from ''redux-simple-router''
import reducers from ''./reducers''

import App from ''./containers/app.jsx''
import About from ''./about.jsx''
import Dashboard from ''./dashboard/index.jsx''

const reducer = combineReducers(Object.assign({},reducers,{
    routing: routeReducer
}))
const store = createStore(reducer)
const history = createbrowserHistory()

syncReduxAndRouter(history,store)

const routes = {
  path: ''/'',component: App,childRoutes: [
    { path: ''about'',component: About },{ path: ''dashboard'',component: Dashboard }
  ]
}

ReactDOM.render(
    <Provider store={store}>
        <Router routes={routes} history={history} />
    </Provider>,document.getElementById(''app'')
)

这似乎是我可以收集的相当标准.但是,我对如何从App下载道具,例如Dashboard组件感到有点困惑.这是App组件:

import React,{PropTypes} from ''react''
import {bindActionCreators} from ''redux''
import {connect} from ''react-redux''
import {Link} from ''react-router''

import * as authActions from ''./../actions/auth''

class App extends React.Component {
    render() {
        return (
            <div>
                <h1>App</h1>
                <ul>
                    <li>
                        <Link to="/">Home</Link>
                    </li>
                    <li>
                        <Link to="/about">About</Link>
                    </li>
                    <li>
                        <Link to="/dashboard">Dashboard</Link>
                    </li>
                </ul>
                {this.props.children}
            </div>
        )
    }
}

App.propTypes = {
    authActions: PropTypes.object.isrequired,authState: PropTypes.object.isrequired
}

function mapStatetoProps(state) {
    return {authState: state.authState}
}

function mapdispatchToProps(dispatch) {
    return {
        authActions: bindActionCreators(authActions,dispatch)
    }
}

export default connect(mapStatetoProps,mapdispatchToProps)(App)

对不起,代码不是更简洁,但我特别试图将authState(从我的Reducer)传递到Dashboard组件,我对React Router和redux-simple的工作原理有点困惑-router libs …

编辑:

我更改了仪表板组件以将其包含在底部:

Dashboard.propTypes = {
    authActions: PropTypes.object.isrequired,mapdispatchToProps)(Dashboard)

我现在可以访问Redux状态和操作.我不确定这是不是正确的方法,但它现在有用……

解决方法

使用react-router v1,您可以使用以下命令访问最深的当前路由上的props:this.props.route.

<Route path=''/'' component={App}>
        <IndexRoute component={Home} />
        <Route path=''about'' component={About} />
        <Route path=''dashboard'' component={Dashboard} customprop="Hello,it''s me" />
        <Route path="*" component={NoMatch} />
</Route>

在仪表板组件中:

this.props.route.customprop => “你好,这是我”

要访问当前路径树中的所有路径,可以遍历this.props.routes(最深路径是最后一个).

reactjs – 在React Redux应用程序中使用OAuth2刷新令牌

reactjs – 在React Redux应用程序中使用OAuth2刷新令牌

我有一个已实施OAuth2的应用.它工作正常,但我在这里与refresh_tokens混淆.我的应用程序正在使用React Redux组合.

我知道我需要检查我的access_token是否过期,然后使用refresh_token请求新的.好的……但什么时候应该刷新它? 401发生之后或者当需要授权的某些API请求准备就绪时(发送前)?

我也知道如何使用HTTP拦截器在发送或检测401响应之前获取所有API请求.
问题是我很困惑如何解决Redux流程中的问题.如何“冻结”令牌刷新时间的请求?或者当我在401响应中解决问题时如何重复请求?

解决方法

首次成功通过服务器验证时,我们将{access_token,expires_in,refresh_token}.我们将在 session storage中存储access_token和expires_in,在本地存储中存储refresh_token.

每当获取access_token以获取数据时(你应该使用fill_token填充来增强/包装fetch),你将检查expires_in是否即将到期(不到1分钟,或你感觉舒服),然后我们使用refresh_token请求新的的access_token.当然,我们还必须将新结果更新到存储.

伪代码:

function getToken() {
    const expiresIn = storage.getItem(KEY_EXPIRES_IN);
    const accesstoken = storage.getItem(KEY_ACCESS_TOKEN);
    if (accesstoken
        && (!expiresIn || moment.unix(Number(expiresIn)).diff(moment(),''minute'') > 1)) {
        return accesstoken;
    }
    return refreshToken();
}

每次向服务器发出请求时,都会调用上面的函数.

P / S:您可能希望将其作为与isomorphic-fetch一起使用的承诺

reactjs – 在React-Redux应用程序中使用OpenID Connect SSO

reactjs – 在React-Redux应用程序中使用OpenID Connect SSO

我正在尝试使用OpenID-Connect提供程序在我的React-Redux应用程序上实现SSO.目的是保护所有组件,并在会话结束时将用户重定向到身份提供商的登录页面.
这就是我无法在应用程序中拥有专用登录页面(组件)的原因.
我已经读过在localStorage中保存JWT可能是一个好主意,所以我想在Redux商店中使用标志isAuthenticated并将JWT保留在localStorage中.然后,我可以从localStorage中获取JWT,以便在我的应用程序中验证我要调用的其他API.这种方法是否合适?

此外,任何人都可以指向我可以用来为此目的获取(和刷新)JWT的库/包吗?我经历了很多文档并尝试了以下但无法使这些工作:

> redux-oidc:我的应用程序中没有任何特定的Callback组件,所以我不太清楚如何将这种方法应用到我的应用程序中.
> passport-openid-connect:Passport依赖于在cookie中存储会话,但我想使用localSorage.
> redux-auth-wrapper:更高阶的组件听起来很棒但我仍然无法弄清楚如何在没有任何专用登录组件的情况下集成它.

有人可以指导我通过吗?我是React生态系统的新手,所以请原谅我的不理解.

任何帮助将非常感激!

谢谢

您正走在正确的轨道上 – redux-oidc使用登录详细信息管理您的Redux状态 – 实际管理JWT的客户端库(隐式流),重定向到IdentityServer(无论哪个)登录页面并返回到您的应用程序(“回调” “)是oidc-client.

redux-auth-wrapper只是一个HOC(高阶组件) – 基本上是一个包装器来检查用户是否经过身份验证(在Redux存储中或使用自定义函数)并转发到登录页面 – 在我看来你不是真的需要它,因为redux-oidc已经为您提供了所需的一切.

我个人也实施了IdentityServer4 – 集中管理所有外部供应商 – 到目前为止它一直很好用.

我建议首先看一下https://blogs.msdn.microsoft.com/webdev/2017/04/26/the-mvp-show-learns-about-asp-net-identity-server-and-heidelberg/,其中IdentityServer4的创建者非常清楚地解释了识别的工作原理和流程(隐式vs混合).
一旦您了解了Identity基础知识以及它们如何挂起,请查看redux-oidc sample(非常容易理解).

玩得开心

总结

以上是小编为你收集整理的reactjs – 在React-Redux应用程序中使用OpenID Connect SSO全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

今天关于如何在React应用程序中使用CSS模块应用全局样式?react css的讲解已经结束,谢谢您的阅读,如果想了解更多关于javascript – 如何使用webpack在React应用程序中异步需要模块?、reactjs – 使用React Router在Redux React应用程序中传递道具、reactjs – 在React Redux应用程序中使用OAuth2刷新令牌、reactjs – 在React-Redux应用程序中使用OpenID Connect SSO的相关知识,请在本站搜索。

本文标签: