我有一个todo应用程序,我正在尝试选择一个项目并将其发送到要编辑的页面。我看了一下这篇文章Getting query parameters from react-router hash fragment,发现他们正在使用this.props.location.query
我想要完成的是获取查询参数并将其显示在输入框中进行编辑。
import * as React from 'react'
import { Router, Route, IndexRoute, hashHistory, browserHistory, Link } from 'react-router'
import {ITask, IStoreAction, ActionType} from '../model/TasksModel'
import store from '../store/Store'
interface TaskEditProp {
task: ITask
}
class TaskEdit extends React.Component<TaskEditProp, {}>{
constructor() {
super();
this.state = store.getState()
store.subscribe(() => {
this.setState(store.getState())
})
//todo: console.log(this.props.location);
}
onSave = (e) => {
e.preventDefault();
var refs: any = this.refs;
var task: ITask = {
index: this.props.task ? this.props.task.index : 0,
text: refs.text.value,
done: false
}
var storeAction: IStoreAction = {
type: ActionType.EDIT_TASK,
task
}
store.dispatch(storeAction)
browserHistory.push('/')
}
onCancel = (e) => {
e.preventDefault();
browserHistory.push('/')
}
render() {
const { props: { children } } = this;
return (
<div className="">
<h3>Edit Task</h3>
<form onSubmit={this.onSave}>
<fieldset className="form-group">
<label for="task">Task</label>
<input type="text" ref="text" className="form-control" >{this.props.location}</input>
</fieldset>
<div className="btn-group">
<button className="btn btn-primary" >Save</button>
<button className="btn btn-warning" onClick={this.onCancel} >Cancel</button>
</div>
</form>
</div>
)
}
}
export default TaskEdit;
我假设我的界面不包含位置,因此道具不知道位置。
以下是我的路线的定义方式:
var Routes = (
<Router history={browserHistory}>
<Route path="/" component={Tasks}>
<IndexRoute component={TaskList} />
<Route path="/add" component={TaskAdd} />
<Route path="/edit/:id" component={TaskEdit} />
</Route>
<Route path="/about" component={About}/>
</Router>
)
我的商店已被派遣,我打电话给browserHistory.push('/edit/'+task.index)
,它发送给我正确的视图,但我无法访问查询参数。其余的代码可以在https://github.com/crh225/HotReactAsp/tree/master/src/HotReactAsp/content谢谢!
答案 0 :(得分:2)
您可以打印By.xpath("//a[contains(text(),'Active Companies/Filing')]"))
来查看道具的呈现方式,并找到提取所需数据的正确方法。
我不知道您使用的By.xpath("//li[contains(.,'Active Companies/Filing')]"))
版本,但据我所知,获取查询参数的正确方法是:
this.props
和这个
react-router
将是
let { id } = this.props.params;
答案 1 :(得分:0)
我确定您现在已经解决了这个问题,但是您需要使用routerProps扩展接口。您将需要@types:react-router-dom
Import { withRouter, Switch, Route, NavLink, RouteProps } from 'react-router-dom';
interface TaskEditProp extends RouteProps {
task: ITask
}