2017-08-31 1 views
-3

ページ内のコンテンツを変更する際に問題が発生しました。 私はすでに多くのインターネットヒントを試しました。ReactJS、ボタンの後にページコンテンツを変更する

ポイント:ページを開くと、loadDepartmentとボタンが表示されます。そして私がボタン "emp"をクリックすると。ページ全体の内容はloadEmployeesに変更されます。私はページをリフレッシュせずにこれが必要です。

componentDidMount() { 
 
     return this.initializeContent("hie") 
 
} 
 

 
initializeContent(choose) { 
 
     if(choose == "emp") { 
 
      console.log("page choosed:", choose); 
 
      return this.loadEmployees(); 
 
     } 
 
     else if(choose == "hie") { 
 
      console.log("page choosed:", choose); 
 
      return this.loadDepartment(); 
 
     } 
 
     else { 
 
      console.log("not found user choice -", choose); 
 
      return (<div>There is a problem with loading of hierarchy pagae</div>) 
 
     } 
 
    } 
 
    
 
loadDepartment() { 
 
    return (<div>apple</div>) 
 
} 
 
loadEmployees() { 
 
    return (<div>orange</div>) 
 
} 
 
    
 
render() { 
 
    return (<div> 
 
     {this.componentDidMount()} 
 
     <button className="userReq" data-name="emp" onClick={this.initializeContent.bind(this, "emp")}>blabla</button> 
 
    </div>) 
 
}

答えて

0

あなたは、コンポーネントの内部状態を切り替える必要があります。 render()関数は特殊で、戻り値はReactによって使用されますが、loadEmployees()関数は同じ特殊な状態を持ちません。ここでは、やるべき事のようなものです:あなたがSETSTATE()を呼び出すたび

var MyComponent = React.createClass({ 
 

 

 
     loadDepartment() { 
 
     this.setState({ 
 
      view: "department" 
 
     }); 
 
     }, 
 
     loadEmployees() { 
 
     this.setState({ 
 
      view: "employees" 
 
     }); 
 
     }, 
 

 
     render() { 
 
     if (this.state.view === "employees") return <div>orange</div>; 
 
     if (this.state.view === "department") return <div > apple </div>; 
 
     return (<div> 
 
      <button className = "userReq" 
 
      data-name = "emp" 
 
      onClick = { this.loadEmployees } >blabla </button> 
 
      </div>) 
 
     } 
 
     });

は、コンポーネントが自動的に再レン​​ダリングされますが、それが何を決定するためにthis.stateの新しい値を使用します。レンダリングする。

+0

ありがとうございますが、コンソールにエラーがあります。 "hierarchy.js:144 Uncaught TypeError:ヌルのプロパティ 'view'を読み取ることができません - 問題は、このコードがより大きなプロジェクトにあることです。なぜなら、loaddepとloadempにはオレンジとリンゴがないからです。しかし、彼らは別のコードでいっぱいです。あなたが私に書いたものを手に入れました。おそらく、私がこの問題を解決する機会はありません。フロントエンド開発者のIamがこの部分を手伝ってくれました。 –

+0

スニペットは実行するためのものではありません(あなたのものをコピーして改良しました)。要点はコードを読んでテクニックを理解することです - onClickハンドラでsetState()を使ってコンポーネントの内部状態を変更し、render()でthis.stateの値をオンにすることができます。それは明確ですか、それとも違う方法で説明してほしいですか? –

+0

あなたの側からは完全にはっきりしています。問題は、私は反応のテクニックを理解していないということです。私はいくつかのチュートリアルを見る必要があります。 –

関連する問題