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

使用parse和format使用react-final-form和react-select的条件下拉列表

沈龙光
2023-03-14

这是几个类似问题的后续问题,但是找到的解决方案(Erik Rasmussen的 组件)似乎不适用于由parse and format操作的select选项。

当存储在表单状态中时,我希望将选项对象“扁平化”为它们的值(并将它们改回选项对象,以便使用React-Select呈现),因此我执行了以下操作:

const SelectAdapter = ({ input, ...rest }) => (
  <Select {...input} {...rest} searchable />
);

const options = [
  { value: "two-a", label: "Two A" },
  { value: "two-b", label: "Two B" }
];
<Field
  name={fieldName}
  component={SelectAdapter}
  options={options}
  parse={(formattedOption) => formattedOption ? formattedOption.value : undefined}
  format={(parsedValue) => options.find((option) => option.value === parsedValue)}
/>

并在pickoptions中更改一行,如下所示:

-const aValue = aField.input.value.value;
+const aValue = aField.input.value;

现在,pickoptions似乎可以正确地清除子级/从属select字段的值,就react-final-form状态/值而言,但它仍然在select字段中呈现旧值,我想不出原因。如有任何帮助,我们将不胜感激!提前道谢。

演示问题的CodeSandbox:在第一个下拉列表中选择一个选项,然后在第二个下拉列表中选择一个选项。接下来,将第一个下拉菜单更改为其他选项。它应该清除第二个下拉列表(您会注意到它清除了表单中的实际值,在输入下面打印的值中,但在第二个/child下拉列表中保留了以前选择的选项的旧标签文本)。您可能还注意到Reset按钮会在内部清空表单值,但不会清除输入。同样的根本原因,我猜。

(编辑)超级黑客变通?

const SelectAdapter = ({ input, ...rest }) => {
  const [hack, setHack] = React.useState(0);

  React.useEffect(() => {
    if (rest.options) setHack((hack) => hack + 1);
  }, [rest.options]);

  return <Select key={hack} {...input} {...rest} searchable />;
};

共有1个答案

凤柏
2023-03-14

我不确定。如果您在呈现childoptionconsole.log()选项,它们确实会发生更改。所以react-select是否忽略了对选项属性的更改?据我所知RFF似乎不是什么问题。

 类似资料:
  • 问题内容: 该事件不起作用。 问题答案: 更改事件是在元素而不是元素上触发的。但是,这不是唯一的问题。您定义函数的方式不会导致组件的重新渲染。似乎您可能尚未完全了解React的概念,所以“在React中思考”可能会有所帮助。 您必须将所选值存储为状态,并在值更改时更新状态。更新状态将触发组件的重新呈现。 另请注意,元素没有属性。反应/ JSX简单地复制了著名的HTML语法,它不引入自定义属性(有例

  • 问题内容: 正如我从React文档中获得的那样,使用钩子不需要大量的代码重构,并且可以轻松地将其包含在现有代码中。我想使可重用的下拉列表,从反应组件渲染方法调用。这是我的代码: 并得到错误:只能在函数组件的主体内部调用挂钩。我已经检查了有关此问题的现有信息: react-hot-loader版本是4.8.0 我的react和react-dom是同一版本16.8.4; 我的babel-config包

  • 问题内容: 使用 withRouter() 时如何获取路由上下文,位置,参数等? 您可以使用withRouter获得该信息,还是必须将这些内容显式传递到组件树中? 问题答案: 因此,不再使用。在道具中都可以使用: 因此,假设您想将用户转到新路线,您只需

  • 问题内容: react-bootstrap站点中的示例代码显示以下内容。我需要使用数组来驱动选项,但是在查找将要编译的示例时遇到了麻烦。 问题答案: 您可以从这两个功能开始。第一个将基于传递到页面的道具动态创建您的选择选项。如果将它们映射到状态,则选择将自行重新创建。 然后,您将在render内部拥有此代码块。您将传递一个对onChange道具的函数引用,每次调用onChange时,所选对象将自动

  • 本文向大家介绍React Native中的RefreshContorl下拉刷新使用,包括了React Native中的RefreshContorl下拉刷新使用的使用技巧和注意事项,需要的朋友参考一下 我们知道App中都有下拉加载,在React Native中也有类似的控件 一、属性方法 (1) onRefresh function 在视图开始刷新的时候调用 (2) refreshing bool