Reactjs useState未将状态更新为仅0和1
我有一个代码,当按1+时更新数量。但是当i console.log变量时,它只从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。如
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>
)