代码之家  ›  专栏  ›  技术社区  ›  tomen

ReactJS-无法为回调函数返回jsx?

  •  1
  • tomen  · 技术社区  · 7 年前

    我已经和react合作了一段时间,但我遇到了一个非常基本的问题,但我不明白为什么它不起作用。 基本上,在登录组件中,我提交一个表单,当它返回错误时,呈现一条snackbar消息。

      handleSubmit = (event) => {
        event.preventDefault()
      //api call here
        onFormSubmit(this.state)
         .then(() => history.push('/teams'))
         .catch(e => <Snackbar message={e}/>)
      }
    
      render() {
    

    使现代化

    我能想到这样做的唯一方法:

    this.state = {
      email: '',
      password: '',
      error: ''
    }
    handleSubmit = (event) => {
    event.preventDefault()
    //api call here
    onFormSubmit(this.state)
     .then(() => history.push('/teams'))
     .catch(e => this.setState({error: e})
    }
    render () {
     return (
       <div>
          {this.state.error && <Snackbar message={this.state.error}/>}....
    

    但我不想同时向服务器提交错误字段。是否有其他方法将其注入组件?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Olivier Boissé    7 年前

    您的解决方案是正确的,您还可以委派 handleSubmit 对于父组件,如果出现错误,则显示 Snackbar 组件,否则将显示 Form

    在您的示例中,如果不想发布错误,可以对 state 对象来控制要发送的属性。

    handleSubmit = (event) => {
      const {email, password} = this.state;
      event.preventDefault()
      //api call here
    
      onFormSubmit({email, password})
        .then(() => history.push('/teams'))
        .catch(e => this.setState({error: e})
    }
    
        2
  •  1
  •   Christian Asivido    7 年前

    handleSubmit 在渲染返回的内部?

    一个选项是在catch内部使用JQuery将Snackbar注入页面。

    error 在捕捉内部设置为true,然后在渲染内部有条件地渲染snackbar this.state.error