Как я могу получить доступ к указанным полям из массива полей 'detail' для получения промежуточных итогов и итогов - PullRequest
0 голосов
/ 13 февраля 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'
             />

Более подробную информацию можно получить по Как получить доступ к указанному полю из массива полей для вычисления промежуточных итогов

Пожалуйста, просмотрите обсуждения и ответы на этот пост. , Мы можем найти решение.

...