Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 子组件中的React.FC setState不';不要更新视图_Javascript_Reactjs_Functional Programming_React Hooks - Fatal编程技术网

Javascript 子组件中的React.FC setState不';不要更新视图

Javascript 子组件中的React.FC setState不';不要更新视图,javascript,reactjs,functional-programming,react-hooks,Javascript,Reactjs,Functional Programming,React Hooks,所以我现在正在做的是创建一个表单,它向后端发送一个请求,然后通过调度一个操作和设置一个状态返回 基本上,这是公司信息,我必须在整个表单中使用它,可以从后端填充数据,但有一件事 我有一个父元素,我在其中传递[state,setState]作为道具,在child中我使用setState,当我在ReduxDevTool中检查它时,它工作得很好。 问题是,当我在下一步访问相同的状态时,我无法接收任何数据,因为useState是一个带有空键的对象,这在以后的表单步骤中不是很有用 我试着接触文档,检查是否应

所以我现在正在做的是创建一个表单,它向后端发送一个请求,然后通过调度一个操作和设置一个状态返回

基本上,这是公司信息,我必须在整个表单中使用它,可以从后端填充数据,但有一件事

我有一个父元素,我在其中传递[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>
}