Javascript 子组件中的React.FC setState不';不要更新视图
所以我现在正在做的是创建一个表单,它向后端发送一个请求,然后通过调度一个操作和设置一个状态返回 基本上,这是公司信息,我必须在整个表单中使用它,可以从后端填充数据,但有一件事 我有一个父元素,我在其中传递[state,setState]作为道具,在child中我使用setState,当我在ReduxDevTool中检查它时,它工作得很好。 问题是,当我在下一步访问相同的状态时,我无法接收任何数据,因为useState是一个带有空键的对象,这在以后的表单步骤中不是很有用 我试着接触文档,检查是否应该使用一些功能,如Javascript 子组件中的React.FC setState不';不要更新视图,javascript,reactjs,functional-programming,react-hooks,Javascript,Reactjs,Functional Programming,React Hooks,所以我现在正在做的是创建一个表单,它向后端发送一个请求,然后通过调度一个操作和设置一个状态返回 基本上,这是公司信息,我必须在整个表单中使用它,可以从后端填充数据,但有一件事 我有一个父元素,我在其中传递[state,setState]作为道具,在child中我使用setState,当我在ReduxDevTool中检查它时,它工作得很好。 问题是,当我在下一步访问相同的状态时,我无法接收任何数据,因为useState是一个带有空键的对象,这在以后的表单步骤中不是很有用 我试着接触文档,检查是否应
getDerivedStateFromProps
,但在React.FC和typescript中,事情并没有那么简单,或者是我在这方面缺乏经验
一些伪代码:
App(){
[state,setState]=useState({name:'',regon:'',phone:''})
返回(
)
}
SomeComponent({state,stateSetter}){
{
stateSetter((previousState)=>({…previousState,编号:{
…previousState.numberOne:e.target.value
}}))}
}
>
}
SomeOtherComponent({useGlobalState}){
返回{useGlobalState.numberOne}
}
我希望我的表单使用从后端派生的新状态,但它只记得最后一次调度的操作输出(这不是最新的,而是在状态方面落后了一步)。这里是固定代码
App(){
const [state,setState] = useState({name:'', regon:'', phone:''}) //add const
return(
<div>
<SomeComponent state={state} stateSetter={setState} />
<SomeOtherComponent useGlobalState={state}/>
</div>
)
}
SomeComponent ({state, stateSetter}){
<input
name="name"
onChange={e=>{
stateSetter({...state, numberOne:{...state.numberOne, [e.target.name]: e.target.value}}) // set object key, and put the variable to the stateSetter's argument, not function.
}
>
}
SomeOtherComponent ({useGlobalState}){
return <div>{useGlobalState.numberOne}</div>
}
App(){
const[state,setState]=useState({name:'',regon:'',phone:''})//添加const
返回(
)
}
SomeComponent({state,stateSetter}){
{
stateSetter({…state,numberOne:{…state.numberOne[e.target.name]:e.target.value}})//设置对象键,并将变量放入stateSetter的参数,而不是函数。
}
>
}
SomeOtherComponent({useGlobalState}){
返回{useGlobalState.numberOne}
}
这里有一个例子
类组件1扩展了React.Component{
render(){
const{handleChange}=this.props;
返回(
);
}
}
类Component2扩展了React.Component{
render(){
const{value}=this.props;
返回(
{value}
);
}
}
类应用程序扩展了React.Component{
状态={
值:“”,
};
handleChange=(e)=>{
this.setState({value:e.target.value});
}
render(){
const{value}=this.state;
返回(
);
}
}
React.render(,document.getElementById('app'))代码>
(IMHO)对于功能组件来说,这是一个糟糕的用例。使用常规组件,等待数据结果,然后将其作为道具传递给组件。这可能看起来像火箭科学,但事实并非如此。@r3wt老实说,我现在不知道你对完美FC的想法是什么,但我非常确定我应该能够使用state。免责声明:我的FC不仅仅是这样做的,它只是一个例子。嘿!并不是在我的代码中我忘记了常量。不止这些。看看输入的onChange属性。你能更详细地解释一下为什么这样做吗?它似乎没有解决我的问题,因为状态没有重新呈现我的FC。谢谢
App(){
const [state,setState] = useState({name:'', regon:'', phone:''}) //add const
return(
<div>
<SomeComponent state={state} stateSetter={setState} />
<SomeOtherComponent useGlobalState={state}/>
</div>
)
}
SomeComponent ({state, stateSetter}){
<input
name="name"
onChange={e=>{
stateSetter({...state, numberOne:{...state.numberOne, [e.target.name]: e.target.value}}) // set object key, and put the variable to the stateSetter's argument, not function.
}
>
}
SomeOtherComponent ({useGlobalState}){
return <div>{useGlobalState.numberOne}</div>
}