繁体   English   中英

使用redux-form 7将自定义道具传递给组件

[英]Passing custom props to component with redux-form 7

我正在使用以下库

"@material-ui/core": "^3.0.3",
"react": "^16.5.0",
"redux": "^4.0.0",
"redux-form": "^7.4.2",

如何将自定义道具传递给redux-form <Field /> component属性?

根据这个来自redux-form的示例 ,我下面的所有内容都应该起作用,但它不是将multiline={true}rows={2}道具拉到<TextField />组件中。

我不确定该如何工作,因为我是javascript新手。 任何帮助,将不胜感激。

PostForm.js

import React from 'react'
import { Link, withRouter } from 'react-router-dom';
import { reduxForm, Field } from 'redux-form';
import Button from '@material-ui/core/Button';
import TextField from '@material-ui/core/TextField'


class PostForm extends React.Component {

  renderTextField = ({ input,
                      label, 
                      meta: { error, touched } },
                      ...custom) => {
    return (
        <TextField
          name={label}
          label={label}
          {...input}
          {...custom}
        />
    );
  };


  onSubmit(event) {
    event.preventDefault();

    const { submitPost, history, formValues } = this.props;

    submitPost(formValues.values, history);
  }

  render() {
    <form onSubmit={this.onSubmit.bind(this)}>

      <Field 
        name="title"
        component={this.renderTextField}
        label="Title"
      />
      <Field 
        name="body"
        component={this.renderTextField}
        label="Body"
        multiline={true}
        rows={2}
      />
      <div className={classes.buttonContainer}>
        <Button to="/posts" component={Link} className={classes.button} color='secondary'>
          Cancel
        </Button>
        <Button type='submit' className={classes.button} color='primary'>
          Next
        </Button>
      </div>
    </form>
  }
}

export default reduxForm({
  validate,
  form: 'postForm',
  destroyOnUnmount: false
})(PostForm)

要渲染多行字段,您需要传递multiLine={true} (请注意,骆驼套-这很重要)。 这是基于https://github.com/erikras/redux-form-material-ui链接的文档,这些文档看起来像旧版本。 根据较新的文档, multiline似乎都是小写的(为后代而留在这里)。

更新

此外, ...custom不在花括号内。 应该

renderTextField = ({ input, label, meta: { error, touched } , ...custom })

关于Field如何传递道具的一些知识-不足以涵盖此答案中的所有内容,但我可以提供一些指导以帮助您入门。

<Field ... />是JSX表示法。 尽管JSX使读取和编写HTML构造变得容易,但是[React actually doesn't need JSX][1] 在内部,它们都编译为纯JS函数(使用React.createElement和其他工厂函数)。

在那之后,传递...custom等只是ES6中引入的rest / spread运算符 它们是快捷方式,您也可以在没有它们的情况下使用React(这意味着您可以仅使用ES5语法)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM