Javascript React Hooks-使用新道具更新状态

Javascript React Hooks-使用新道具更新状态,javascript,reactjs,react-hooks,react-state,Javascript,Reactjs,React Hooks,React State,我对带有钩子的新实现感到非常困惑。 如何为接收到的道具设置状态值,甚至在收到道具时不会重新渲染。 (这是我想要的结果) 这是我的代码:(我想将“amount”值设置为null,除非props接收到它,无论哪种情况,它都应该处于状态并更改) 从“React”导入React; 从“Firebase”导入Firebase; 从“@material ui/core/Grid”导入网格; 从“@material ui/core/Button”导入按钮; 从“@material ui/core/Box”导入

我对带有钩子的新实现感到非常困惑。 如何为接收到的道具设置状态值,甚至在收到道具时不会重新渲染。 (这是我想要的结果)

这是我的代码:(我想将“amount”值设置为null,除非props接收到它,无论哪种情况,它都应该处于状态并更改)

从“React”导入React;
从“Firebase”导入Firebase;
从“@material ui/core/Grid”导入网格;
从“@material ui/core/Button”导入按钮;
从“@material ui/core/Box”导入框;
从“@material ui/core/TextField”导入TextField;
导出默认函数编号字段(道具){
常量handleAmountChange=(targetValue)=>{
Firebase.database().ref('users/'+Firebase.auth().currentUser.uid
+'/details/'+props.date+'/'+props.values.fieldName.set(targetValue);
设定金额(targetValue);
}
常量a=props.details[props.values.fieldName];
const[amount,setAmount]=React.useState(props.details.Calls);
const GenerateAmount=({amount:a})=>{
const[amount,setAmount]=React.useState(null);
React.useffect(()=>{
设定金额(a)
},{}) 
}
返回(
handleAmountChange(props.values.buttons.b1)}>{props.values.buttons.b1}
handleAmountChange(props.values.buttons.b2)}>{props.values.buttons.b2}
handleAmountChange(props.values.buttons.b3)}>{props.values.buttons.b3}
handleAmountChange(e.target.value)}
InputLabelProps={{{shrink:true,}}variant=“概述”/>
);
}


我完全确定你在问什么,但你可以使用hook useffect在道具更改时收听,然后设置状态

像这样:

const [amount, setAdmount] = useState(null);
    useEffect(() => {
        setAmount(props.amount);
    }, [props.amount]);


为什么在另一个函数中调用useState?阅读挂钩的第一条规则:我将使依赖项
props.amount
<代码>道具在每次渲染时都将是一个新的对象引用,因此这与没有依赖项一样。这是真的,我错了。我改变了我的答案。为什么这不是公认的答案?还有别的吗?还有,我觉得这里不需要国家。当状态和道具像这样结合在一起时,它们通常是不需要的。谢谢!它工作得很好!(第一个值是要设置的值,第二个值是触发器?要跟踪的值?我是否正确?)我需要状态才能更改值,它是一个文本框。当它改变时,它也会触发一个函数将其写入Firebase DB。此处的useEffect目的是“加载”值并在之前显示。
const [amount, setAdmount] = useState(null);
    useEffect(() => {
        setAmount(props.amount);
    }, [props.amount]);