2017-12-10 12 views
2

私はcreate-react-appと反応してフルスクリーンの回転掲示板を作っています。React buildはコンポーネントクラスの名前を削除します

Appコンポーネントは、多くのScreenのコンポーネントが含まれている、(WiFiPassword、OpenTimes、イベントなどの名前...)1つのコンポーネントを含む各1 - そしてそれは子供だのAppから現在の項目が名前である場合Screenコンポーネントをチェックし、それが表示されている場合はその画面を表示し、そうでない場合は非表示にします。

これは、値がチェックされているコードです:

class Screen extends Component { 

    componentDidUpdate() { 
    const active = this.props.active; // The active item, from parent state 
    const elemName = this.props.children.type.name; //The name of the child class 
    ... 
    if(active === elemName){ 
     //If we have a match, then show this screen 
    } 
    } 
    ... 
} 

開発で動作しているとき、これは本当によく働きます。

npm run buildを実行してプロセスが終了すると、アプリケーションがロードされても機能しません。ビルドプロセスは要素からクラス名をスクラブして、何も表示されないことを意味します。

私はconsole.log()アクティブ小道具と子のクラス名の両方が、私はこれを取得:Screen年代の名前である、それは上にあるものは何でも画面

active: WiFiPassword

elemName: t

elemNameを、子は、常にですt

ビルドプロセスを通じて反応するコンポーネントの名前を保持する方法はありますか?

+1

この質問は、[XY問題](http://xyproblem.infoです/)、しかし幸運にもXはその質問から明らかです。解決策は、 'App'の' render() 'に表示されている' Screen'だけをレンダリングすることです。 –

+0

子供のインデックスとは対照的に、コンポーネントをその名前で参照する必要があるのはなぜですか? – Aron

+0

には1つの子しかないので、画面の内容です。 は単にアニメーションを処理し、表示するときはコンテンツは非ウェブ開発者によって追加されます。私は代わりに、に小道具を渡してから、コンポーネントを動的に引き込みます。 – Cone

答えて

0

https://reacttraining.com/react-router/web/api/Switchは、だから私は、これを回避する方法を見つけました:代わりにクラス名に頼るので、私が代わりにインポートscreens/index.jsファイルを使用して、私の<Screen>要素の一つ一つ:そして、私に利用できる各画面とそのインデックス、ファイルをインポートし... export {default as Welcome} from './Welcome' export {default as WiFi} from './WiFi' ...

import * as Screens from './screens'

それから私は、アプリの中から同じロジックに応じて、私が好きな画面を使用します。

const Component = Screens[this.state.slide]; <Component/>

0

あなたは画面を管理する良い方法があるので、react-router-domを使用するように切り替える必要があります。優れたコンポーネント・スイッチがあり、それは一度に一つのコンポーネントを示しています

import { Switch, Route } from 'react-router' 

<Switch> 
    <Route exact path="/" component={Home}/> 
    <Route path="/about" component={About}/> 
    <Route path="/:user" component={User}/> 
    <Route component={NoMatch}/> 
</Switch> 
ここ

より多くの情報:

+0

これはおかげさまですが、私のアプリではルーティングは必要ありません(キオスクモードでは大きなテレビで動作しています)。フォワード。 – Cone

関連する問題