我正在使用 react-router 和 CSS-modules 和 webpack。这一切都很好,但现在需要能够更改语言。我首先尝试通过仅将状态属性更改为不同的语言来做到这一点,但是当更改它时,当前路由不会重新呈现,因此语言更改只会在下一次路由更改发生时生效,即单击链接。
计划 B:尝试将语言环境添加到路由 / 以便它现在出现在 URL 中,这应该会生效,因为路由更新 -> 重新渲染。但是,我现在在加载我的 CSS 模块时遇到错误。
这是我的路由器设置:
<Router onUpdate={() => window.scrollTo(0, 0)} history={hashHistory}>
<Route path="/" component={App}>
<IndexRedirect to="/english/hydraulics" />
<Route path="/:lang">
<IndexRedirect to="/hydraulics" />
<Route path="/" component={Hydraulics}/>
<Route path="hydraulics" component={Hydraulics}/>
<Route path="bearings" component={Bearings}/>
<Route path="compressor" component={Compressor}/>
<Route path="gears" component={Gears}/>
</Route>
</Route>
</Router>
这是我的应用程序中的功能:
constructor(props) {
super(props);
this._updateLanguage = this._updateLanguage.bind(this);
}
componentWillMount() {
this.setState({
lang: 'english',
language: english
})
}
_updateLanguage(language) {
this.setState({
language: language === ENGLISH ? english : russian
});
}
_addChildren() {
return this.props.children ? React.cloneElement(this.props.children, {language: this.state.language}) : this.props.children;
}
render() {
var language = this.state.language;
var children = this.props.children;
return <div className={wrapper}>
<Nav copy={this.state.language} location={this.props.location} callback={this._updateLanguage} locale={this.state.lang}/>
<section className={content}>
{ this._addChildren() }
</section>
</div>
}
我的默认路线是液压,所以我得到了错误:
未捕获的错误:“is-english/hydraulics”CSS 模块未定义。
我想知道它是否是我的 webpack css 模块加载器中的配置:
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('style', 'css?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]')
},
在hydraulics.jsx中,我像这样导入CSS:
import styles from './hydraulics.css';
我不明白的是为什么css模块是从“is-english”加载的,“is-”前缀来自哪里?此外,该文件不在英文子文件夹中,它与液压系统.jsx 在同一个文件夹中
或者是否与路线的安排方式有关?