代码之家  ›  专栏  ›  技术社区  ›  bier hier

如何让选择器在redux表单应用程序中工作?

  •  0
  • bier hier  · 技术社区  · 6 年前

    我是一个反应新手,并试图在我的redux表单应用程序中使用选择器。这是一个简化的示例(原始表单包含数十个计算和字段)。它从表单中提取2个金额并返回:

    import { createSelector } from "reselect";
    import { sum } from "../calculations";
    
    const sumAmounts = state =>{
        debugger
        if (!state) return;
    
        if (!state.amount1 || !state.amount2)
      return  sum(state.amount1,state.amount2);
    };
    export default createSelector(
        sumAmounts
    );
    

    当我运行我的表单时,它不会调用sumAmounts:

    import React from "react";
    import { Field, reduxForm, formValueSelector } from "redux-form";
    import { connect } from "react-redux";
    import sumAmounts from "../selectors/sumSelector";
    
    export class FormContainer extends React.Component {
      render() {
        return (
          <form>
            <Field
              name="amount1"
              type="number"
              component="input"
              label="Amount 1"
            />
            <Field
              name="amount2"
              type="number"
              component="input"
              label="Amount 1"
            />
            <Field
              name="amount3"
              type="number"
              component="input"
              label="Amount 3"
            />
            <Field
              name="amount4"
              type="number"
              component="input"
              label="Amount 4"
            />
            <Field
              name="amount4"
              type="number"
              component="label"
              label={this.props.sum}
            />
          </form>
        );
      }
    }
    
    FormContainer = reduxForm({
      form: "myForm" // a unique identifier for this form
    })(FormContainer);
    
    const selector = formValueSelector("myForm");
    
    FormContainer = connect(state => {
      const amount1 = selector(state, "amount1");
      const amount2 = selector(state, "amount2");
      const sum = sumAmounts(amount1, amount2);
      return { amount1, amount2, sum };
    })(FormContainer);
    
    export default FormContainer;
    

    我怎样才能确定它叫什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dario    6 年前

    你的 sumAmounts 不是选择器,而是使用2个参数调用它( sumAmounts(amount1, amount2) )但它只有一个参数 state .

    在你的 mapstatetoprops 您已经提取了计算总和所需的状态道具,即 amount1 amount2 所以为什么不在这里计算和而不是通过其他选择器呢?

      const amount1 = selector(state, "amount1");
      const amount2 = selector(state, "amount2");
      const sum = +amount1 + +amount2;
      console.log("map state to props " , amount1, amount2, sum);
      return { amount1, amount2, sum }; 
    
    推荐文章