当前位置: 首页 > 知识库问答 >
问题:

在TypeScript中将自定义道具传递到Redux Form Field

通正平
2023-03-14

我想将自定义属性传递到我的Redux表单字段。文件中说:

传递给字段的任何自定义道具都将与输入和元对象合并到同一级别的道具对象中。

但将自定义道具传递给字段组件将引发编译错误:

<Field
    name="E-Mail"
    component={MaterialTextField}
    myProp="Test"
/>

类型“”的属性“myProp”不存在

在props属性中,我只能添加一组预定义的属性,如占位符或类型。传递另一个道具将抛出此错误:

<Field
    name="E-Mail"
    component={MaterialTextField}
    props = {{
        myProps: 'Test'
    }}
/>

键入“{name:“E-Mail”;组件:(props:any)=

是否有可能将自定义道具传递给TypeScript中的Field组件?

共有3个答案

严宏旷
2023-03-14

我不是一个Typescript用户,所以我不确定类型定义是如何工作的,但是我发现了这个关于Redux form v6的类型定义的线程。最后,它们链接到这个存储库,该存储库应该有(如果我理解正确的话)更新的类型定义。

我想另一种选择是切换到vanilla JS来实现这个特定的功能。或者,可以定义一个函数,该函数接受您的自定义道具,然后返回一个组件,准备接受Redux表单道具并合并它们。

编辑:我试图在下面包含的代码中说明最后一个建议的基本思想,即所谓的HOC(高阶组件)。

const inputWithCustomFields = (customFields) => ComponentToGetExtraFields => (props) => {
	const mergedProps = {...props, ...customFields};
	return (<ComponentToGetExtraFields {...mergedProps} />);
};

const ComponentThatNeedsCustomStuff = ({myCustomField1, myCustomField2, ...rest}) => {
	console.log('doing stuff with the custom props',myCustomField1, myCustomField2);
	return (<div><h1>{myCustomField1 + myCustomField2}</h1><input {...rest} /></div>);
}

const Parent = () => {
  const myCustomFields = {
     myCustomField1: "Hello, ", 
     myCustomField2: "world!", 
     value: 'can\'t change me',
     onChange: () => { /* do nothing */ }
   };
  const MergedComponent  = inputWithCustomFields(myCustomFields)(ComponentThatNeedsCustomStuff);
  return (<div>
      <MergedComponent />
    </div>);
};

ReactDOM.render(<Parent />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
史烨
2023-03-14

要将自定义道具传递给Redux表单的字段组件,您需要声明所有要传递道具的接口。

interface YourCustomProps {
    myProp1: string;
    myProp2: number;
}

现在,使用Redux Form中的GenericFieldField设为YourCustomField,您将能够将YourCustomProps传递到该字段

import { Field, GenericField } from 'redux-form';

const YourCustomField = Field as new () => GenericField<YourCustomProps>;

现在,您可以将自定义道具传递给界面中声明的YourCustomField

<YourCustomField
    myProp1="Hi"
    myProp2={123}
    component={MaterialTextField}
/>

通过这种方式,您可以将任何内容作为自定义道具传递,例如react组件!:)

罗诚
2023-03-14

在我这边做了更多的实验后,我找到了一个传递定制道具的解决方案:

<Field 
    name="myName"
    props={{
        type: 'text'
    }}
    component={myComponent}
    {...{
        myCustomProps1: 'myCustomProp1',
        myCustomProps2: 'myCustomProp2'
    }}
/>

在myComponent中,您可以在属性的根级别上使用自定义道具:

const myComponent = (props) => {
    return <div>{props.myCustomProp1 + " " props.myCustomProp2}</div>
}
 类似资料:
  • 我是一个相当新的反应,这是一个我正在努力解决的问题。

  • 问题内容: 我正在使用ReactRouter创建一个多页面应用程序。我的主要组件是,它呈现了所有到子组件的路由。我正在尝试通过路线传递道具,根据我所做的一些研究,子组件利用最常见的方式来挖掘传递下来的道具是通过它们继承的对象。但是,这个对象对我来说是未定义的。在子组件的函数上,我和我返回了一个看起来像这样的对象 看起来根本不像我期望的道具。这是我的详细代码。 父组件(我试图在所有子组件中将“ hi

  • 问题内容: 当我将商店从道具传递到其他组件时,它变得不确定。我正在使用时会发生这种情况,但如果没有这种情况,它会很好。路线部分 路线在组件中 布局方法 我正在像这样通过应用程序组件传递商店 该商店将从这样的布局组件转到主体组件 在主体组件中,我是从正在node.js服务器中运行的api获取的 我在功能中出现错误 错误 无法读取未定义的属性“地图” 奇怪的是,当我在没有路线的情况下工作时,一切都会好

  • 问题内容: 我已经构建了自己的自定义react-bootstrap Popover组件: 该组件的呈现方式如下: 现在,我想向组件中添加自定义道具,例如:我的文字,并使用新道具在弹出框中设置一些内容,例如- 但随后我在浏览器中收到此警告: 警告:标签上的未知道具。从元素中删除这些道具。 现在,我想我可以删除零件并逐个插入所有原始道具,而无需自定义道具,但是这样我就失去了“淡入淡出”效果,这也是处理

  • 我正在使用React Router创建一个多页面应用程序。我的主要组件是

  • 我使用的反应与反应路由器的项目,我需要传递道具的子组件从路由。 我有这样的设置: App.js Home.js 问题是主组件总是给出错误“未定义”。我无法理解如何解决这个问题。如果我从Home.js中移除道具,组件渲染就很好。但当我尝试访问道具时,会出现错误。