Реагируйте на пометку вычисления на основе значения props - PullRequest
0 голосов
/ 18 июня 2020

У меня есть компонент, в котором я делаю расчет оценки заказа (умножение количества на его цену) в двух случаях

1) В методе жизненного цикла

componentDidMount(){
  if (this.props.isRestarted) {
    this.setState({
          orderEstimation: this.props.formData.valNominal * this.props.formData.priceLimit,
   })
}

2) В событие

<FormAmountField
    label={}
    placeholder={}
    value={this.state.price}
    onChangeText={(value) => {
    this.setState({
        price: value,
        orderEstimation: parseFloat(value) * parseFloat(this.state.quantity)
    })
}}

Как вы можете видеть в обоих случаях: orderEstimation: parseFloat(value) * parseFloat(this.state.quantity)

У меня есть случай, когда this.props.selectedTitleDetails.exchangeHost == "THIS_TEXT" я хочу, чтобы расчет изменился parseFloat(value) * parseFloat(this.state.quantity) / 100

Как я могу применить это изменение в обоих случаях? в жизненном цикле и методе?

1 Ответ

1 голос
/ 18 июня 2020

Вы можете использовать переменную состояния для отметки - exchangeValue. Пример:

constructor() {
    this.state = {
        exchangeValue: 1
    }
}

componentDidUpdate(prevProps) {
     if (prevProps.selectedTitleDetails.exchangeHost !== this.props.selectedTitleDetails.exchangeHost 
         && this.props.selectedTitleDetails.exchangeHost === 'THIS_TEXT') {
          this.setState({
               exchangeValue: 100
          })
     }
}

Затем вы добавляете this.state.exchangeValue в свой расчет

componentDidMount(){
  if (this.props.isRestarted) {
    this.setState({
          orderEstimation: this.props.formData.valNominal * this.props.formData.priceLimit / this.state.exchangeValue,
   })
}

и

onChangeText={(value) => {
    this.setState({
        price: value,
        orderEstimation: parseFloat(value) * parseFloat(this.state.quantity) / this.state.exchangeValue
    })
}}
...