Как я могу получить доступ к указанному полю из массива полей для расчета промежуточных итогов - PullRequest
0 голосов
/ 12 февраля 2020

Я использую форму ValueSelector и работаю с массивом вычисляемых полей. Когда я использую этот синтаксис, у меня возникает проблема с синтаксисом, но не ошибка времени выполнения.

Это формула для вычисления промежуточного итога:

   const calculatedSubtotal = 
     (`detail[${this.props.index}].quantity`,`detail[${this.props.index}].product.price`) = 
      `detail[${this.props.index}].quantity` * `detail[${this.props.index}].product.price`

И это формула для расчета всего:

   const calculatedTotal = (`detail[${this.props.index}].subtotal`) = 0 + 
         `detail[${this.props.index}].subtotal`

Когда я выполняю эти строки, у меня возникают проблемы с синтаксисом.

Detail - это имя fieldArray.

Как я могу объявить спецификацию поле из массива полей для вычисления?.

Что не так?

это мой компонент renderDetail:

      renderDetail = ({fields, meta: { error,submitFailed}}) => (
                 <dl>
                  <dt>
                   <button type="button" className= 'btn btn-primary' 
            onClick={() => fields.push()}>Add Detail</button>
                   {submitFailed && error && <span>{error}</span>}
                  </dt>
                  { fields.map((item, index) =>

                    <dd key={index}>
                     <br></br>
                       <button className= 'btn btn-light mr-2'
                         type="button"
                         title="Remove detail"
                         onClick={() => { fields.remove(index)
                            if(fields.length == 0 || fields.length === 
             undefined){

                         }
                          try{
                           for(let x in fields){
                            fields.remove(index) 
                            let d = fields.selectedIndex;
                             if(fields.remove(index) && d >= 1 && d< 
           fields.length ){
                            fields.removeAll(index);
                            }
                          }
                         }catch{console.info("deletes Index")}

                }}> Delete </button>

                    <h4>Item #{index + 1}</h4>

              <Field 
                 id={`${item}._id`}
                 name={`${item}.quantity`}
                 component= {NumberPicker}
                  placeholder= '...quantity'
                  label = "Quantity" 
                 />
                <br></br>
             <h3><b>Product</b></h3>
                  <Field 
                   id={`${item}._id`}
                   name={`${item}.product.code`}
                   type="number"
                   component= {RenderFieldNumber}
                   placeholder='...Product's code'
                   label = "product's code" 
                  />
                 <Field 
                   id={`${item}._id`}
                   name={`${item}.product.name`}
                   type="text"
                   component= {RenderField}
                   placeholder='...Product's name'
                   label = "product's name" 
                   />
                <Field 
                  id={`${item}._id`}
                  name={`${item}.product.price`}
                  component= {NumberPickerFloat}
                  placeholder= '...Price'
                  label = "Product's price" 
                />
                <br></br>
               <h3><b>Subtotal</b></h3>
                  <Field 
                    id={`${item}._id`}
                    name={`${item}.subtotal`}
                    component= {SubtotalWidget}
                    placeholder= '...subtotal'
                    label = "Subtotal" 
                  />

                </dd>
                      )
                      }

                       {error && <dt className="error">{error}</dt>}
                       </dl> 
                  );

И в методе рендеринга я получаю этот путь к fieldArray:

       <div>Detail:</div>
              <FieldArray
                  name='detail'
                  component={this.renderDetail}
                  label='Detail'
                 />

1 Ответ

0 голосов
/ 13 февраля 2020

Вы пытаетесь сделать функции стрелок для вычисления значений?

const calculatedSubtotal = () => detail[this.props.index].quantity * detail[this.props.index].product.price


const calculatedTotal = () => 0 + detail[this.props.index].subtotal
...