2017-11-17 9 views
0

ボタンをクリックして言語をドイツ語または英語に変更できるReact Webサイトを作成します。私は反応し、まだ学ぶのが初めてです。ボタンをクリックしたときに反応コンポーネントの内容を変更する(異なる言語)

私はこのようになりますシンプルなJSON作成:私はonClickのをとき、その状態をトグルボタンを作成し

{ 
    "de": { 
    "header": "Willkommen", 
    "footer": "Auf Wiedersehen" 
    }, 
    "eng": { 
    "header": "Welcome", 
    "footer": "Goodbye" 
    } 
} 

を。しかし、私はどこにでもアクセスしたいなら、国家がこれをするのは間違った方法だと私は思う。

class Button extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = {isOn: true}; 
    this.handleClick = this.handleClick.bind(this); 
    } 
    handleClick() { 
    if (this.state.isOn) { 
     this.setState({isOn: false}) 
    } else { 
     this.setState({isOn: true}) 
    } 
    } 
    render() { 
    return(
     <button type="button" onClick={this.handleClick}>DE/ENG{JSON.stringify(this.state.isOn)}</button> 
    ); 
    } 
} 

これで、JSONデータをインポートして、コンポーネントに適切なデータを挿入します。ここのこの1つは機能しません。私はそれをする方法を知らない。ボタンをクリックすると、すべてのコンポーネントがドイツ語または英語のデータを取得する必要があります。私は多くのコンポーネントでそれを使いたいと思っています。

import DATA from './data.json'; 

class Main extends React.Component { 
    render() { 
    const data = Button.state.isOn ? DATA.de : DATA.eng; 
    return (
     <div> 
     <Button onIsOnChange={this.buttonChange} /> 
     <span>{data.header}</span> 
     </div> 
    ); 
    } 
} 

をあなたがこれを行う方法を知っています(私が、たとえばconst型データ= DATA.deを使用しますが、私はボタンをクリックすると、そのコンテンツは変更されません。とき働いていますか)?

答えて

0

リアクションはあなたに「状態を持ち上げる」ことを奨励します。これはこれを行う良い機会です。私は要素に(functional stateless componentを使って)Button要素から状態と​​メソッドを削除し、代わりに同じ状態(オン/オフ)を追加することをお勧めします。ボタンをクリックすると、(onClick属性を使用して)電話をかけてthis.props.handleClickにするだけです。​​をボタンの小道具として指定し、Main要素の​​メソッドに応じて状態を設定します。また、ButtonコンポーネントにisOn小物を付ける必要があります。

Maindataでは、constはthis.state.isOnに応答します。

0

あなたのデザインを少し変更することをお勧めします。主なコンポーネントの言語の変更(それを呼び出す「onLanguaheChange」は、例えば)メソッドを作成し、Buttonコンポーネントの小道具として渡し、

<Button onClick={this.onLanguageChange}.../> 

、内部のButtonコンポーネントは、あなただけのthis.props.onClick(...)を呼び出して渡すことができます選択/必須言語。それはあなたのパラメータでMain componemtメソッドonLanguageChangeを呼び出します。その後、Mainの状態を必要に応じて変更し、必要なコンポーネントに渡すことができます。