首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Redux-form 6.0+更改所有字段值

Redux-form 6.0+更改所有字段值
EN

Stack Overflow用户
提问于 2016-12-16 15:32:32
回答 2查看 3.5K关注 0票数 5

我试图在redux形式中更改多个值。我把它们放在一个对象中,所以基本上我想用对象值覆盖redux表单状态值。实现这一目标的一种方法是运行this.props.reset(),然后对每个属性执行多个this.props.change()事件。它可以工作,但它发送太多的事件,而且速度很慢。我试过的第二件事是运行this.props.initialize(data,false),但是验证没有重新运行,所以我可以很容易地提交表单而不需要验证。是否有一种方法可以运行一个事件来覆盖我的对象的表单状态?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-16 15:55:44

我害怕这是不可能的。不久前,我也遇到了同样的问题,并且阅读了所有redux格式的文档,我得得出结论,您必须使用动作创建者。要么更改任何一个自动填充。

如果您使用初始化,您正在初始化这些值,这意味着它用于数据的异步初始化,因此,它并不像您所说的那样进行验证。

很久以前,在以前的版本中,他们有一个"defaultValue“概念。但他们把它移走了。如果你真的不需要进行上一次更新,也许你应该检查一下这是否对你有帮助。

注意事项

我建议你遵循这个发行线程。他们在那里谈过。

票数 4
EN

Stack Overflow用户

发布于 2019-01-31 23:29:58

这是可能的。我使用Redux通过创建-反应-应用程序文件结构实现了它。

使用stateProps/dispatchProps模式。

您应该已经知道操作和还原剂来使用这个。下面是我最初使用https://medium.com/@notrab/getting-started-with-create-react-app-redux-react-router-redux-thunk-d6a19259f71f启动的项目

我把它包括在内,所以当我使用还原剂和动作这样的术语时,你会知道我在说什么。

在操作/索引文件中

代码语言:javascript
运行
复制
import makeAction from "./makeActionCreator";

const clearMultiplePropertiesInState = "clearMultiplePropertiesInState";

export default {
  constants: {
    clearMultiplePropertiesInState,
  },

  creators: {
    clearMultiplePropertiesInState: makeAction(clearMultiplePropertiesInState
  }
};

在你的减速器/{你的减速器}.js中

代码语言:javascript
运行
复制
import actions from '../actions';
const { constants } = actions;

const INITIAL_STATE = {
  name: "Dr Hibbert",
  age: "40",
  height: "180cm"
};

//#region const declarations
const { clearMultiplePropertiesInState } = constants;
//#endregion

export default function (state = INITIAL_STATE, action) {
  switch (action.type) {

    case clearMultiplePropertiesInState: {
      var fields = action.data;

      var theState = {
        ...state
      };

      for(var i = 0; i < fields.length; i++) {
        theState[fields[i]] = "";
      }

      return theState;
    }

    default:
      if (!action.type.includes('@@')) {
        console.log(`No action for: ${action.type} type`);
      }

      return state;
  }
}

因此,您要清除的三个项是state.name、state.age和state.height

代码语言:javascript
运行
复制
import React from "react";
import { connect } from "react-redux";
import { Form, Icon, Button, Modal } from "semantic-ui-react";
import actions from "common/actions";
const { creators } = actions;


const MyComponent = ({ stateProps, dispatchProps }) => {

  return (
    <React.Fragment>
        <Button
          disabled={disableOkButton}
          onClick={() => {
                dispatchProps.clearMultiplePropertiesInState(["name", "age", "height"]);
          }}
          primary
          labelPosition='right'
          icon='checkmark'
          content="Create Club"
          loading={stateProps.modalOkButtonLoading}
        />
    </React.Fragment>
  );
}

function mapStatetoProps(state) {
  return {
    stateProps: {
      name: state.name,
      age: state.age,
      height: state.height
    }
  };
}

function mapDispatchToProps(dispatch) {
  return {
    dispatchProps: {

      clearMultiplePropertiesInState: (fieldNames) => {
        dispatch(creators.clearMultiplePropertiesInState(fieldNames));
      }
    }
  };
}

export default connect(mapStatetoProps, mapDispatchToProps)(MyComponent);

正如我所说,您需要非常熟悉使用来理解这一点,但这是可能的。此示例显示我同时重置了3个值。所以影像也传递新的价值..。

我通常使用一个changeSinglePropInState操作(代码中没有包含),它传递fieldName和它想要在状态中更改的fieldValue,因为我不想为我的状态中的每个项目创建一个操作。

此外,如果您可以将头绕在它周围,这将更改状态内对象的一个属性。

代码语言:javascript
运行
复制
case addItemToWishList: {
  return {
    ...state,
    buyer: {
      ...state.buyer,
      wishlist: action.data
    }
  };
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41187664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档