проверка формы redux не принимается

#reactjs #validation #redux #react-redux #redux-form

#reactjs #проверка #redux #react-redux #redux-форма

Вопрос:

Я пытаюсь отключить кнопку отправки для моей формы. Я удалил большинство обработчиков, и входные данные принимаются для ввода «name», так что это понятнее. Ввод имени работает нормально, однако, когда я добавляю реквизит проверки к вводу имени и отключаю реквизит для кнопки отправки, кнопка по-прежнему остается активной. Чего мне не хватает?

     export class RecipeForm extends React.Component {

      onChange = e => {
        const { value, name } = e.target;
        this.setState({
          [name]: value
        });
      };

      // **** other function handlers here *****//


      required = value => {
        if (!value || value === '') {
          return 'This field is required';
        }
        return undefined;
      }

      render() {

        const { name } = this.state;
        const { submitSucceeded, handleSubmit, valid } = this.props;

        if (submitSucceeded) {  // submitSucceeded is a prop of redux form, boolean: true, and succeed to submit 
          alert("You have successfully added a new recipe")
          return <Redirect to='/your-menu' />
        }

        let newCategory;
        if (otherCheckbox) {
          newCategory = <NewCategory addNewCategory={this.addNewCategory} />;
        }



        return (
          <div className="form">
            <Alerts />

            <form onSubmit={handleSubmit(recipe => this.onSubmit(recipe))}>
              <h2>Add a new favorite recipe!</h2>

              <label htmlFor="name"> Recipe Name </label>
              <input
                name="name"
                id="name"
                type="text"
                label="Recipe Name"
                value={name}
                validate={[this.required]}
                onChange={this.onChange}
              />


              // **** other inputs here ***** ///
              

              <button type="submit"
                disabled={!this.props.valid}
              >Submit</button>
            </form>

            <br></br>
          </div>
        );
      }
    }

    const mapStateToProps = state => ({
      menuItems: state.menu.menuItems,
      categoryList: state.users.categoryList,
      userId: state.auth.id,
      authToken: state.auth.authToken
    });

    RecipeForm = connect(mapStateToProps)(RecipeForm);

    export default reduxForm({
      form: "recipe",
      onSubmitFail: (errors, dispatch) =>
        dispatch(focus("recipe", Object.keys(errors)[0]))
    })(RecipeForm);
 

Комментарии:

1. Когда вы console.log используете реквизит, каково значение valid свойства?

2. логическое значение, оно говорит true.

3. Таким образом, он говорит, что значение является действительным, следовательно !this.props.valid , возвращает false и кнопка не отключена.

4. Возможно, вы хотите проверить, не является ли поле также грязным. Если он загрязнен и недействителен, отключите его. Если это не грязно, также отключите его.

5. чтобы быть более понятным, он говорит «true» для !this.props.valid, а также говорит «true» для this.props.valid. значит, к чему-то не прислушиваются