Reactjs useState未将状态更新为仅0和1

Reactjs useState未将状态更新为仅0和1,reactjs,react-hooks,use-state,Reactjs,React Hooks,Use State,我有一个代码,当按1+时更新数量。但是当i console.log变量时,它只从0更新为1。如果设置了任何其他初始值,则不会对其进行更新。有人能帮忙吗 import React,{useState}来自“React” 从“react native”导入{图像、样式表、文本、视图} 从“反应本机手势处理程序”导入{TouchableOpacity} 常量订阅数量=()=>{ const[quantity,setQuantity]=useState(10)//无论我设置什么,它都只将其设置为1。如

我有一个代码,当按1+时更新数量。但是当i console.log变量时,它只从0更新为1。如果设置了任何其他初始值,则不会对其进行更新。有人能帮忙吗

import React,{useState}来自“React”
从“react native”导入{图像、样式表、文本、视图}
从“反应本机手势处理程序”导入{TouchableOpacity}
常量订阅数量=()=>{
const[quantity,setQuantity]=useState(10)//无论我设置什么,它都只将其设置为1。如果我将其设置为0,则其值为0。
返回(
1?styles.quantityCircle:styles.quantityCircleDisabled}
onPress={quantity>1?设置数量(数量-1):null}
禁用={quantity>1?false:true}
>
-
{
让温度=数量
温度+=1
控制台日志(临时)
设置数量(温度)
}}
>
+
//这里的数量显示为0或1。根本不增加。
数量={quantity}
1升=₹ 70
)
}

导出默认订阅数量
能否尝试以下示例以增加数量

 setQuantity(prevQuantity => prevQuantity + 1);
请试试这个

import React, { useState } from 'react'
import { Image, StyleSheet, Text, View } from 'react-native'
import { TouchableOpacity } from 'react-native-gesture-handler'

const SubscriptionQuantity = () => {
    const [quantity, setQuantity] = useState(10) //Whatever i set it only sets it to 1. If i set it to 0 then its 0.
    const onMinus = () => setQuantity(prev => (prev > 1 ? (prev - 1) : prev));
    const onPlus = () => setQuantity(prev => prev + 1);

    return (
        <View>
            <View style={styles.quantityView}>
                <TouchableOpacity
                    style={quantity > 1 ? styles.quantityCircle : styles.quantityCircleDisabled}
                    onPress={onMinus}
                    disabled={quantity > 1 ? false : true}
                >
                    <Text style={styles.buttonText}>-</Text>
                </TouchableOpacity>
                <Image source={require('../../assets/images/Render_New_Label04_Revised.png')}
                    resizeMode="contain"
                    height={null}
                    width={null}
                />
                <TouchableOpacity
                    style={styles.quantityCircle}
                    onPress={onPlus}
                >
                    <Text style={styles.buttonText}>+</Text>
                </TouchableOpacity>
            </View>

            <View style={styles.quantityView}>
            //Here quantity is shown as 0 or 1. not increasing at all.
                <Text>Qty.= {quantity} </Text>
                <Text>1 Ltr = ₹ <Text>70.00</Text></Text>
            </View>
        </View>
    )
}

export default SubscriptionQuantity
import React,{useState}来自“React”
从“react native”导入{图像、样式表、文本、视图}
从“反应本机手势处理程序”导入{TouchableOpacity}
常量订阅数量=()=>{
const[quantity,setQuantity]=useState(10)//无论我设置什么,它都只将其设置为1。如果我将其设置为0,则其值为0。
constonminus=()=>setQuantity(prev=>(prev>1?(prev-1):prev));
常量onPlus=()=>setQuantity(prev=>prev+1);
返回(
1?styles.quantityCircle:styles.quantityCircleDisabled}
onPress={onMinus}
禁用={quantity>1?false:true}
>
-
+
//这里的数量显示为0或1。根本不增加。
数量={quantity}
1升=₹ 70
)
}
导出默认订阅数量

我认为最好解释一下@bymax提出的解决方案为什么有效

以前的代码(不工作):

返回(
//...
1?styles.quantityCircle:styles.quantityCircleDisabled}
onPress={quantity>1?设置数量(数量-1):null}
禁用={quantity>1?false:true}
>
-
)
问题出在onPress道具上。您没有传递函数,而是传递setQuantity(quantity-1)调用的结果或null。发生的情况是,每个渲染都在调用该函数,并将结果作为TouchableOpacity组件的onPress道具传递

相反,加号按钮更好:

返回(
//...
{
让温度=数量
温度+=1
控制台日志(临时)
设置数量(温度)
}}
>
+
)
即使这不是一个干净的解决方案,但这段代码仍然有效,因为您正在将一个函数传递给TouchableOpacity组件的onPress道具


@bymax提出的解决方案更加简洁易读,因此我建议您使用相同的方法。

您遇到的问题是,您正在使用state
quantity
值对渲染代码执行操作,您应该尝试在render方法之外进行此操作,并且只呈现逻辑的最终结果,就像@baymax在其答案中所做的那样。同样有效。我相信baymax的答案让代码看起来很好!!酷,如果它起作用,你可以投票给社区的其他成员。
return (
//...
  <TouchableOpacity
      style={quantity > 1 ? styles.quantityCircle : styles.quantityCircleDisabled}
      onPress={quantity > 1 ? setQuantity(quantity - 1) : null}
      disabled={quantity > 1 ? false : true}
  >
      <Text style={styles.buttonText}>-</Text>
  </TouchableOpacity>
)