React:读取在 history.push 中作为参数传递的数据
React: reading data passed as parameter in history.push
我是 React 新手,我正在尝试将一些数据作为 history.push
中的参数发送。
基本上我在单击按钮时调用方法,在方法内部我调用 api。如果我得到成功响应,我将重定向到其他页面,并且我还需要传递一些数据。
下面是我的代码:
class Login extends Component {
constructor(props) {
super(props);
this.state = {
enteredName: null,
enteredPwd: null,
rescode: null,
userName: null,
formatDesc: null,
userFormat : null,
success: false,
responseJson : null,
};
}
state = {
enteredName: null,
enteredPwd: null,
rescode: null,
userName: null,
formatDesc: null,
userFormat : null,
success: false,
responseJson : null,
}
render=() =>{
return (
<Router>
<div id= "login-page">
<div className="back-image" style={{height:"100vh"}}>
<div className="container">
<form className="form-login" action="index.html">
<h2 className="form-login-heading">sign in now</h2>
<div className="login-wrap">
<label>User ID</label>
<input type="text" ref="usrname" className="form-control" placeholder="User ID" autofocus/>
<br/>
<label>Password</label>
<input type="password" ref = "password" className="form-control" placeholder="Password"/>
<br/>
<a className="btn btn-theme btn-block" onClick={this.login.bind(this)}><i className="fa fa-lock mr-10"/>SIGN IN</a>
<Dialog ref={(component) => { this.dialog = component }} />
</div>
</form>
</div>
</div>
</div>
</Router>
);
}
login = (e) => {
e.preventDefault();
fetch('some url', {
method: 'POST',
body: JSON.stringify({
"userId": this.refs.usrname.value,
"password": this.refs.password.value
})
})
.then((response) => response.json())
.then((responseJson) => {
console.log(`response: ` , responseJson)
if (responseJson.errorCode === '00') {
this.setState({ rescode: responseJson.errorCode })
this.setState({ userName: responseJson.userName })
this.setState({ formatDesc: responseJson.formatDesc });
this.setState({userFormat : responseJson.userFormat});
this.setState({success : true});
this.setState({responseJson: responseJson});
this.props.history.push(
'/Taskactive',
{
role_id : this.userFormat,
userName : this.userName
}
);
}
else {
alert("Error Logging in.." + responseJson.errorMsg);
this.refs.usrname.value = "";
this.refs.password.value = "";
}
})
.catch((error) => {
console.error(error);
});
this.refs.usrname.value = "";
this.refs.password.value = "";
}
所以到目前为止一切都很好,但现在我需要读取传递的数据,即 role_id 和 userName in下一页即 Taskactive。那么我们如何读取 Taskactive.jsx
中的那些数据呢?
如果它是一个用 react-router 渲染的组件,传递的东西在组件 props 中。
console.log(this.props.match.params)
据我所知,您的路由器配置有误。登录名应该是 <Router>
的子级,根本不应该是容器路由器。
示例配置:
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route path="/login" component={Login} />
<Route path="/signup" component={Signup} />
<Route path="/restore-password" component={RestorePass} />
<Route path="/forgot-password" component={ForgotPass} />
</Switch>
</Router>
改变这个
this.props.history.push(
'/Taskactive',
{
role_id : this.userFormat,
userName : this.userName
}
);
对此:
this.props.history.push({
pathname: '/Taskactive',
appState: {
role_id : this.userFormat,
userName : this.userName
}
});
在您为路径 /Taskactive 呈现的组件内部,您可以访问 this.props.location.appState.role_id 或 this.props.location.appState.userName 的值
您还可以根据自己的意愿更改对象的名称(我一直保持状态)。
希望对您有所帮助。
好的,在苦苦挣扎了 4 天并在 Luna 和 JupiterAmy 给出的答案周围抽搐之后,这对我有用:
里面Login.jsx
this.props.history.push({
pathname : '/Taskactive',
state :{
role_id : responseJson.userFormat,
userName : this.userName,
userid: this.refs.usrname.value
}
}
);
并在 Taskactive.jsx
this.props.location.state.role_id
希望这对以后的人有所帮助。
我是 React 新手,我正在尝试将一些数据作为 history.push
中的参数发送。
基本上我在单击按钮时调用方法,在方法内部我调用 api。如果我得到成功响应,我将重定向到其他页面,并且我还需要传递一些数据。
下面是我的代码:
class Login extends Component {
constructor(props) {
super(props);
this.state = {
enteredName: null,
enteredPwd: null,
rescode: null,
userName: null,
formatDesc: null,
userFormat : null,
success: false,
responseJson : null,
};
}
state = {
enteredName: null,
enteredPwd: null,
rescode: null,
userName: null,
formatDesc: null,
userFormat : null,
success: false,
responseJson : null,
}
render=() =>{
return (
<Router>
<div id= "login-page">
<div className="back-image" style={{height:"100vh"}}>
<div className="container">
<form className="form-login" action="index.html">
<h2 className="form-login-heading">sign in now</h2>
<div className="login-wrap">
<label>User ID</label>
<input type="text" ref="usrname" className="form-control" placeholder="User ID" autofocus/>
<br/>
<label>Password</label>
<input type="password" ref = "password" className="form-control" placeholder="Password"/>
<br/>
<a className="btn btn-theme btn-block" onClick={this.login.bind(this)}><i className="fa fa-lock mr-10"/>SIGN IN</a>
<Dialog ref={(component) => { this.dialog = component }} />
</div>
</form>
</div>
</div>
</div>
</Router>
);
}
login = (e) => {
e.preventDefault();
fetch('some url', {
method: 'POST',
body: JSON.stringify({
"userId": this.refs.usrname.value,
"password": this.refs.password.value
})
})
.then((response) => response.json())
.then((responseJson) => {
console.log(`response: ` , responseJson)
if (responseJson.errorCode === '00') {
this.setState({ rescode: responseJson.errorCode })
this.setState({ userName: responseJson.userName })
this.setState({ formatDesc: responseJson.formatDesc });
this.setState({userFormat : responseJson.userFormat});
this.setState({success : true});
this.setState({responseJson: responseJson});
this.props.history.push(
'/Taskactive',
{
role_id : this.userFormat,
userName : this.userName
}
);
}
else {
alert("Error Logging in.." + responseJson.errorMsg);
this.refs.usrname.value = "";
this.refs.password.value = "";
}
})
.catch((error) => {
console.error(error);
});
this.refs.usrname.value = "";
this.refs.password.value = "";
}
所以到目前为止一切都很好,但现在我需要读取传递的数据,即 role_id 和 userName in下一页即 Taskactive。那么我们如何读取 Taskactive.jsx
中的那些数据呢?
如果它是一个用 react-router 渲染的组件,传递的东西在组件 props 中。
console.log(this.props.match.params)
据我所知,您的路由器配置有误。登录名应该是 <Router>
的子级,根本不应该是容器路由器。
示例配置:
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route path="/login" component={Login} />
<Route path="/signup" component={Signup} />
<Route path="/restore-password" component={RestorePass} />
<Route path="/forgot-password" component={ForgotPass} />
</Switch>
</Router>
改变这个
this.props.history.push(
'/Taskactive',
{
role_id : this.userFormat,
userName : this.userName
}
);
对此:
this.props.history.push({
pathname: '/Taskactive',
appState: {
role_id : this.userFormat,
userName : this.userName
}
});
在您为路径 /Taskactive 呈现的组件内部,您可以访问 this.props.location.appState.role_id 或 this.props.location.appState.userName 的值 您还可以根据自己的意愿更改对象的名称(我一直保持状态)。
希望对您有所帮助。
好的,在苦苦挣扎了 4 天并在 Luna 和 JupiterAmy 给出的答案周围抽搐之后,这对我有用:
里面Login.jsx
this.props.history.push({
pathname : '/Taskactive',
state :{
role_id : responseJson.userFormat,
userName : this.userName,
userid: this.refs.usrname.value
}
}
);
并在 Taskactive.jsx
this.props.location.state.role_id
希望这对以后的人有所帮助。