2016-04-18 63 views
-1

在我的EMI计算器应用程序中使用react.js时,我有一个名为Home.js的组件,当用户输入表单值并单击计算emi时,In React.js如何将表单的值从一个组件传递到另一个组件

我喜欢将表单值传递给另一个名为PromptContainers的组件,在该组件中它将被评估并计算并显示EMI。

,为方便阅读完整的源代码是在https://github.com/sudanvellakovilkanakavel/multicomponent-EMIapp

我Home.js

var React = require('react'); 
var ReactRouter = require('react-router'); 
var Link = ReactRouter.Link; 

var divStyle = { 
    background: "#D9EDF7" 


}; 

var Home = React.createClass({ 
render: function() 
{ 

return(

<div className= "jumbotron col-sm-6 col-sm-offset-3 text-center" style={divStyle} > 
      <form name="myForm" onSubmit= {'../containers/PromptContainer.js'} method="post"> 



      <div class="form-group"> 
      <label>Choose a bank :</label> 
       <div class="col-sm-6"> 
      <select> 
    <option value="">Canadian Imperial Bank of Commerce</option> 
    <option value="">Bank of Montreal</option> 
    <option value="">Laurentian Bank of Canada</option> 
    <option value="">National Bank of Canada</option> 
</select> 
</div> 
</div> 
      <br /> 
      <div class="form-group"> 
      <label>Choose a Gender :</label> 
       <div class="col-sm-6"> 
       <select> 
    <option value="">Male</option> 
    <option value="">Female</option> 
    <option value="">Other</option> 

</select> 
</div> 
</div> 
<br /> 
      <div class="form-group"> 
      <label>Choose a loan type :</label> 
      <div class="col-sm-6"> 
      <select> 
    <option value="">Personal</option> 
    <option value="">Housiing</option> 
    <option value="">Vechile</option> 
    <option value="">Business</option> 
</select> 
</div> 
</div> 
      <br /> 

       <div class="form-group"> 
      <label>Enter the current age :</label> 
      <div class="col-sm-6"> 
      <input type="number" class="form-control" name="age" placeholder="eg. 25" /> 
     </div> 
     </div> 
      <br /> 
      <div class="form-group"> 
      <label>Enter monthly income in $:</label> 
      <div class="col-sm-6"> 
      <input type="number" class="form-control" name="income" placeholder="eg. 30000" /> 
      </div> 
      </div> 
       <br /> 
     <div class="form-group"> 
      <label>Enter loan amount in $:</label> 
      <div class="col-sm-6"> 
      <input type="number" class="form-control" name="loan" placeholder="eg. 1000000" /> 
      </div> 
      </div> 
       <br /> 
      <div class="form-group"> 
      <label>Enter interest rate in % : </label> 
      <div class="col-sm-6"> 
      <input type="text" class="form-control" name="rate" placeholder="eg. 10.5" /> 
      </div> 
      </div> 
      <br /> 
      <div class="form-group"> 
      <label>Enter duration in months : </label> 
      <div class="col-sm-6"> 
      <input type="number" class="form-control" name="months" placeholder="eg. 48" /> 
      </div> 
      </div> 
      <br /> 
       <br /> 
       <br /> 
       <div className="form-group col-sm-4 col-sm-offset-4"> 
       <Link to='../containers/PromptContainer.js'> 

      <button className="btn btn-block btn-success"type="submit">CALCULATE</button> 

      </Link> 
</div> 
<br /> 
       <br /> 
       <br /> 

      </form> 

      </div> 

    ) 

} 

}); 

module.exports = Home; 

我PromptContainer.js代码如下

var React = require('react'); 
var ReactDOM = require('react-dom'); 


var PromptContainer = React.createClass({ 

    render: function() { 

     return (

     <div className= "jumbotron col-sm-6 col-sm-offset-3 text-center">  


calInterestandvalidation: function() { 


if(document.myForm.age.value == "") 
     { 
      alert("Please provide your age!"); 
      document.myForm.age.focus() ; 
      return false; 
     } 
if(document.myForm.income.value == "") 
     { 
      alert("Please provide your income!"); 
      document.myForm.income.focus() ; 
      return false; 
     } 
    if(document.myForm.loan.value == "") 
     { 
      alert("Please provide your loan!"); 
      document.myForm.loan.focus() ; 
      return false; 
     } 

    if(document.myForm.rate.value == "") 
     { 
      alert("Please provide your rate!"); 
      document.myForm.rate.focus() ; 
      return false; 
     } 
    if(document.myForm.months.value == "") 
     { 
      alert("Please provide your months!"); 
      document.myForm.months.focus() ; 
      return false; 
     } 

    if(


    document.myForm.age.value != "" && 
    document.myForm.income.value != "" && 
    document.myForm.loan.value != "" && 
    document.myForm.rate.value != "" && 
    document.myForm.months.value != "" 

    ) 
     { 


      var loanterm = document.myForm.months.value; 
      var roicomb; //rate of interest calculated on monthly basis 

      var emi; 
      var principle = document.myForm.loan.value; 
      var rannualinterest = document.myForm.rate.value ; 




      roicomb = rannualinterest/12/100; 

      emi=principle*roicomb *(1+roicomb)^loanterm/((1+roicomb)^loanterm-1); 
      alert(emi); 
      return true; 

      } 

return(true); 
}, 



     ) 



} 



}); 

     </div> 




module.exports = PromptContainer; 

Main.js

var React = require('react'); 
var ReactRouter = require('react-router'); 

var divStyle = { 
    background: "#F5F5DC" 

}; 

var Main = React.createClass({ 


    render: function() { 

    return (
       <div className= "jumbotron col-sm-6 col-sm-offset-3 text-center" style={divStyle} > 

      <h2><font color="orange">CHOOSE YOUR LOAN WISELY </font></h2> 
      <h4>An React App For Calculating Your Monthly Loan Interest in Different Canadian Banks</h4> 
      <br /> <br /> 

      {this.props.children} 
      </div> 

      ) 
        } 


    }); 

module.exports = Main; 

个route.js

var React = require('react'); 
var ReactRouter = require('react-router'); 
var Router = ReactRouter.Router; 
var Route = ReactRouter.Route; 
var IndexRoute = ReactRouter.IndexRoute; 
var hasHistory = ReactRouter.hasHistory; 
var Main = require ('../components/Main'); 
var Home = require ('../components/Home'); 
var PromptContainer = require ('../containers/PromptContainer'); 


var routes = (

<Router history={hasHistory}> 

<Route path='/' component= {Main} > 

    <IndexRoute component={Home} /> 
    <Route path='result' component={PromptContainer} /> 


</Route> 
</Router> 


); 


module.exports = routes; 
+0

1.提供一些代码小例子去, 请。 2.没有太多的思考,我会说这样做的“反应”方式是在父组件(两个组件)上触发一个回调 - 这会改变父组件的状态。这个回调为PromptContainers设置了一个新的道具,然后自动重新渲染。 – wnstnsmth

+0

你有没有完成任何反应教程?我认为这只是TODO应用程序的基本转型。 –

+0

您好,非常感谢您的快速回复。我添加了我的代码。我是新来的,善待帮助。 –

回答

1

只是去通过阵营文档

对于两个组件之间的通信是没有 父子关系,你可以建立自己的全球盛会 系统。订阅componentDidMount()中的事件,在 componentWillUnmount()中取消订阅,并在收到事件时调用setState()。通量模式是安排这种情况的可能方法之一。

Suorce:https://facebook.github.io/react/tips/communicate-between-components.html

周边设置事件系统的帮助,您可以检查https://gist.github.com/minwe/14a62f0eb5e865fef078

或者干脆检查Flux,因为它自然地作出反应

+0

非常感谢,这非常有帮助。 –

+0

@SudanMaplebots标记答案是正确的,如果你足够快乐。谢谢 –

相关问题