我正在使用React hooks来处理应用状态,我想知道如何使用props来初始化功能组件状态?useState
hook文档明确地说,
const [count, setCount] = useState(0);
我想用传递给组件的props的值初始化0值。
import React from 'react';
export default class Sym extends React.Component{
constructor(props){
super(props);
this.state = {
sym : [0,3,2,8,5,4,1,6],
active: this.props.activeSym
}
this.setActive = this.setActive.bind(this);
}
setActive(itemIndex){
this.setState({
active: itemIndex
});
}
render(){
return (
<div><h1>{ this.state.sym[this.state.active]}</h1></div>
);
}
}
工作正常。其中父组件传递activeSym
prop,Sym
组件使用constructor
中的this.props.activeSym
初始化状态。是否有任何解决方案在函数组件中实现相同?
6条答案
按热度按时间6ioyuze21#
首先,你可以从props中定义它(如果prop存在):
然后你可以更新这个值,当prop没有立即有一个值时(当组件渲染时):
rqqzpn5f2#
是的,这也可以用函数组件来实现!你只需要添加
useEffect
来监听prop的变化,用prop值初始化状态附加沙盒链接
https://codesandbox.io/s/confident-agnesi-ohkq7?file=/src/MakeComponent.js
idv4meu83#
是的,你可以首先使用props定义状态:
然后你可以如果状态仍然是undefined意味着props没有值,那么:
xjreopfe4#
如下所示:
2nc8po8w5#
riddhi的代码可以是
由于每次从父更新时值prop都会更改,因此不需要使用useeffect更新它,特别是因为依赖数组仅包含
value
请不要在state中存储props,而是直接使用它们,因为这可能会导致以后在state没有正确更新时很难找到bug
myzjeezk6#
有两种方法可以更改状态:
1.一个是使用这个.状态和
1.另一个是这个. setState。
我们使用第一个方法来初始化构造函数中的状态,其余时间使用第二个方法。
在构造函数中初始化状态一种方法是在构造函数中初始化状态。正如我们之前讨论的,构造函数是React示例化类时要调用的第一个方法。这是初始化组件状态的理想位置,因为构造函数是在React在UI中呈现组件之前调用的。
Initialize State Without Constructor在React中初始化状态的另一种方法是使用Class属性。一旦类在内存中示例化,类的所有属性都会被创建,这样我们就可以在render函数中读取这些属性。