【问题标题】:can't type in input fields when using material-ui-redux-form due to re rendering由于重新渲染,使用 material-ui-redux-form 时无法输入输入字段
【发布时间】:2016-11-21 20:46:30
【问题描述】:

我正在使用带有 redux 的 material-ui。出于某种原因,每当我按照http://redux-form.com/6.2.0/examples/material-ui/ 提供的示例进行操作时,我都无法输入我的输入字段。

使用 chrome redux 开发工具后,我注意到输入的状态在我输入时会发生变化,但是每当输入某些内容时它就会重新渲染整个组件,这使得它看起来就像什么都没有正在打字。奇怪的是,这仅在我使用 Field 组件时发生,如示例中使用的那样。如果我只使用 material-ui 组件,表单允许输入并且不会重新渲染。我已将整个代码包含到我的组件中。任何帮助深表感谢!我做错了什么?

import React, { Component } from 'react'
import {Field, reduxForm} from 'redux-form'
import { TextField } from 'redux-form-material-ui'
import RaisedButton from 'material-ui/RaisedButton'

class Login extends Component {
  constructor (props) {
    super(props)
    this.handleFormSubmit = this.handleFormSubmit.bind(this)
  }
  componentDidMount () {
    console.log(this.refs)
    this.refs.username        // the Field
      .getRenderedComponent() // on Field, returns ReduxFormMaterialUITextField
      .getRenderedComponent() // on ReduxFormMaterialUITextField, returns TextField
      .focus()                // on TextField
  }
  handleFormSubmit ({ username, password }) {
    console.log(username, password)
  }
  render () {
    const {
      handleSubmit,
      pristine,
      submitting,
      input,
      fields: { username, password }
    } = this.props
    return (
      <div className='loginWrapper'>
        <form onSubmit={handleSubmit(this.handleFormSubmit)}>
          <div id='loginNotch' />
          <h1 className='loginHeader'>Login</h1>
          <div>
            <Field
              component={TextField}
              name='username'
              floatingLabelText='Username'
              ref='username' withRef />
          </div>
          <div>
            <Field
              component={TextField}
              type='password'
              name='password'
              floatingLabelText='Password'
              ref='password' withRef />
          </div>
          <div>
            <RaisedButton
              label='Go'
              primary />
          </div>
        </form>
      </div>
    )
  }
}

// TODO: keep property names consistent with server
export default reduxForm({
  form: 'login',
  fields: ['username', 'password']
})(Login)

更新:我查看了文档并从导出中删除了字段,但它仍然无法正常工作。

你可以从这里克隆项目https://bitbucket.org/kvoth3/loanpayments.git 这只是一个简单的登录屏幕

【问题讨论】:

    标签: reactjs redux material-ui redux-form


    【解决方案1】:

    尝试将减速器更改为

    const rootReducer = combineReducers({
      form: authReducer
    })
    

    ReduxForm 期望你的 redux 状态结构是

    {
       form: {
          formName: {}
       }
    }
    

    如果您需要使用除form 之外的其他名称,则需要为reduxForm() 装饰器提供getFormState(state)

    【讨论】:

    • 老兄...非常感谢!!我花了一整天的时间调试这个。
    • 很高兴能帮上忙
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2021-09-05
    • 2018-09-14
    相关资源
    最近更新 更多