[英]In React.js How to pass values of form from one component to another component
In my EMI calculator application using react.js , i have form in one component called Home.js when user enter the form values and click calculate emi,在我使用 react.js 的 EMI 计算器应用程序中,当用户输入表单值并单击计算 emi 时,我在一个名为 Home.js 的组件中创建了表单,
I like to pass the form values to another component called PromptContainers where it will be evaluated and EMI will be calculated and displayed.我喜欢将表单值传递给另一个名为 PromptContainers 的组件,在那里将对其进行评估并计算和显示 EMI。
for easy reading full source code is in https://github.com/sudanvellakovilkanakavel/multicomponent-EMIapp为方便阅读完整的源代码在https://github.com/sudanvellakovilkanakavel/multicomponent-EMIapp
my Home.js我的 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;
My PromptContainer.js code is as follows我的 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路由.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;
Just go through React docs只需浏览 React 文档
For communication between two components that don't have a parent-child relationship, you can set up your own global event system.
对于没有父子关系的两个组件之间的通信,您可以设置自己的全局事件系统。 Subscribe to events in componentDidMount(), unsubscribe in componentWillUnmount(), and call setState() when you receive an event.
在 componentDidMount() 中订阅事件,在 componentWillUnmount() 中取消订阅,并在收到事件时调用 setState()。 Flux pattern is one of the possible ways to arrange this.
通量模式是一种可能的安排方式。
Suorce: https://facebook.github.io/react/tips/communicate-between-components.html来源: https : //facebook.github.io/react/tips/communicate-between-components.html
For help around setting up event system you can check https://gist.github.com/minwe/14a62f0eb5e865fef078有关设置事件系统的帮助,您可以查看https://gist.github.com/minwe/14a62f0eb5e865fef078
Or simply check Flux as it naturally goes with React或者简单地检查Flux,因为它与 React 自然相配
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.