首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于表单的React路由器v4 <Link>

用于表单的React路由器v4 <Link>
EN

Stack Overflow用户
提问于 2017-02-06 13:35:23
回答 1查看 8.7K关注 0票数 6

如何通过<form>使用<Link>?我正在努力避免程序化路由,因为我看到了很多警告。

表单有两个字段:

代码语言:javascript
复制
<form>
    <input type="text" id="what"/>
    <input type="text" id="where"/>
    <Link><button type="submit"></Link>
</form>

我的目标是将页面发送到'/' + document.getElementById('where').value + '/' + document.getElementById('what').value,v4路由器可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-06 13:53:15

使用v4时,<Link>仅用于创建<a>元素。

我认为,对程序化导航的大多数警告来自于没有真正理解history工作原理的人,特别是当试图在组件之外进行编程导航时。withRouter HOC提供了一种向组件添加路由的简单方法。

此外,我将从表单组件内部而不是从按钮进行路由。然后,您只需要确保按钮的类型是submit (这是默认类型)。

您还可以使用DOM函数来访问代码中的值。我建议使用受控输入,但这显然取决于您。

代码语言:javascript
复制
class NavForm extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      what: '',
      where: ''
    }

    this.submitHandler = this.submitHandler.bind(this)
    this.handleInput = this.handleInput.bind(this)
  }

  handleInput(event) {
    const target = event.target
    this.setState({
      [target.name]: target.value
    })
  }  

  submitHandler(event) {
    event.preventDefault()
    // do some sort of verification here if you need to
    this.props.push(`${this.state.where}/${this.state.what}`)
  }

  render() {
    return (
      <form onSubmit={this.submitHandler}>
        <input
          type='text'
          name='what'
          value={this.state.what}
          onChange={this.handleInput} />
        <input
          type='text'
          name='where'
          value={this.state.where}
          onChange={this.handleInput} />
        <button>Submit</button>
      </form>
    )
  }
}

export default withRouter(NavForm)
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42060961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档