第一次选择未定义以 redux 形式选择表单值

Posted

技术标签:

【中文标题】第一次选择未定义以 redux 形式选择表单值【英文标题】:Selecting form values in redux form is undefined for the first selection 【发布时间】:2021-08-19 04:11:34 【问题描述】:

示例位于https://redux-form.com/8.3.0/examples/selectingformvalues/ 我添加了 onChange 函数来检查下拉值如何触发更改。问题是当我第一次从下拉列表中选择一个值时,它是未定义的。但在那之后,任何后续更改都会成功触发价值。谁能帮我解决这个问题?

import React from "react";
import  connect  from "react-redux";
import  Field, reduxForm, formValueSelector  from "redux-form";

let SelectingFormValuesForm = (props) => 
  const  favoriteColorValue,fullName, handleSubmit, hasEmailValue, pristine, reset, subbmitting  = props;

function onChange(favoriteColorValue) 
   console.log(" Triggered", favoriteColorValue);

return (
   <form onSubmit=handleSubmit>
     <div>
      <label>First Name</label>
      <div>
       <Field
        name="firstName"
        component="input"
        type="text"
        placeholder="First Name"
       />
      </div>
     </div>
     <div>
      <label>Last Name</label>
      <div>
       <Field
        name="lastName"
        component="input"
        type="text"
        placeholder="Last Name"
       />
      </div>
     </div>
    <div>
    <label htmlFor="hasEmail">Has Email?</label>
    <div>
      <Field
        name="hasEmail"
        id="hasEmail"
        component="input"
        type="checkbox"
      />
    </div>
  </div>
  hasEmailValue && (
    <div>
      <label>Email</label>
      <div>
        <Field
          name="email"
          component="input"
          type="email"
          placeholder="Email"
        />
      </div>
    </div>
  )
  <div>
    <label>Favorite Color</label>
    <div>
      <Field
        name="favoriteColor"
        component="select"
        onChange=() => onChange(favoriteColorValue)
      >
        <option />
        <option value="#ff0000">Red</option>
        <option value="#00ff00">Green</option>
        <option value="#0000ff">Blue</option>
      </Field>
    </div>
  </div>
  favoriteColorValue && (
    <div
      style=
        height: 80,
        width: 200,
        margin: "10px auto",
        backgroundColor: favoriteColorValue
      
    />
  )
  <div>
    <button type="submit" disabled=pristine || submitting>
      Submit fullName
    </button>
    <button type="button" disabled=pristine || submitting onClick=reset>
      Clear Values
    </button>
  </div>
 </form>
 );
;

 // The order of the decoration does not matter.

 // Decorate with redux-form
 SelectingFormValuesForm = reduxForm(
    form: "selectingFormValues" // a unique identifier for this form
 )(SelectingFormValuesForm);

 // Decorate with connect to read form values
 const selector = formValueSelector("selectingFormValues"); // <-- same as form name
 SelectingFormValuesForm = connect((state) => 
 // can select values individually
 const hasEmailValue = selector(state, "hasEmail");
 const favoriteColorValue = selector(state, "favoriteColor");
 // or together as a group
 const  firstName, lastName  = selector(state, "firstName", "lastName");
 return 
   hasEmailValue,
   favoriteColorValue,
   fullName: `$firstName || "" $lastName || ""`
 ;
 )(SelectingFormValuesForm);

 export default SelectingFormValuesForm;

沙盒链接为: https://codesandbox.io/s/redux-form-selecting-form-values-example-forked-tnqbb?file=/SelectingFormValuesForm.js

【问题讨论】:

【参考方案1】:

字段值将在 e.target.value 中

<Field
    name="favoriteColor"
    component="select"
    onChange=(e) => onChange(e.target.value)
    >
     <option />
     <option value="#ff0000">Red</option>
     <option value="#00ff00">Green</option>
     <option value="#0000ff">Blue</option>
</Field>

【讨论】:

以上是关于第一次选择未定义以 redux 形式选择表单值的主要内容,如果未能解决你的问题,请参考以下文章

如果表单未绑定,如何选择 MS Access 组合框中的第一项

第一次未调用 Cocoa 自定义 URL 方案选择器

Redux-form Material-UI下拉列表未显示下拉列表,选择

如何以 laravel 刀片形式生成输入选择并自定义其选项值?

Wordpress php未定义索引,表单发布到数据库

ReactJS表单应用程序:如何阻止父组件重新渲染? /使用redux共享状态的正确方法