Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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/heroku/2.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 在同一个元素中是否可以从父元素设置状态和从子元素设置状态?_Javascript_Reactjs_React Native_React Props - Fatal编程技术网

Javascript 在同一个元素中是否可以从父元素设置状态和从子元素设置状态?

Javascript 在同一个元素中是否可以从父元素设置状态和从子元素设置状态?,javascript,reactjs,react-native,react-props,Javascript,Reactjs,React Native,React Props,我有一个组件,我需要更新来自父级的值(确定),但是如果用户更改输入(子级/功能组件)的值,我需要在不传递给父级的情况下设置此值以重新渲染子级 请参见此示例: 按照以下步骤操作: 在输入上设置一些值,并查看控制台日志 点击按钮,输入接收新值 再次更改输入值 单击按钮,为什么不再次工作并将值设置为输入 我需要独立的子级(函数组件或类组件),有时我需要使用父级来设置子级值,但也需要保留子级来更改自己的状态,这是可能的?您的示例不起作用的原因是,第一次单击后的任何按钮都不会更改父状态的值,因此不会触发

我有一个组件,我需要更新来自父级的值(确定),但是如果用户更改输入(子级/功能组件)的值,我需要在不传递给父级的情况下设置此值以重新渲染子级

请参见此示例:

按照以下步骤操作:

  • 在输入上设置一些值,并查看控制台日志
  • 点击按钮,输入接收新值
  • 再次更改输入值
  • 单击按钮,为什么不再次工作并将值设置为输入

  • 我需要独立的子级(函数组件或类组件),有时我需要使用父级来设置子级值,但也需要保留子级来更改自己的状态,这是可能的?

    您的示例不起作用的原因是,第一次单击后的任何按钮都不会更改父状态的值,因此不会触发渲染

    下面是一个简单的代码片段,它通过在每次单击时添加一个唯一的计数器值来解决此问题,以始终触发渲染,但您也可以将处理程序传递给子级并清除父级状态,或将其与子级状态同步,等待下一次按钮单击

    我会说,设置道具的状态是一种反模式,会导致意外的断开(问题证明了这一点);最好在一个地方设置/处理状态

    const-App=()=>{
    const[parentValue,setParentValue]=React.useState(“”);
    const clickCount=React.useRef(0);
    常量parentValueHandler=()=>{
    setParentValue(`newvalue from parent${++clickCount.current}`);
    };
    返回(
    将值更改为父级
    )
    }
    const Child=({parentValue})=>{
    const[value,setValue]=React.useState(parentValue);
    React.useffect(()=>{
    setValue(parentValue);
    },[parentValue]);
    返回(
    setValue(e.target.value)}
    />
    );
    }
    ReactDOM.render(
    ,
    document.getElementById(“根”)
    );
    
    
    
    下面是一个在父级中保持状态并将控制权传递给子级的示例:Hey@pichard,thx for reply,但在这个示例中,状态由父级控制,我需要保持由父级和子级控制,是否可以在不向父级传递回调的情况下重新呈现子级?谢谢。我首先要说,从道具设置状态是一种反模式,最好在一个地方设置/处理状态。但您的示例不起作用的原因是,第一次单击按钮会更改
    valueParent
    ,因此会重新渲染,但任何后续单击都不会更改
    valueParent
    的值,因此不会触发渲染。(如果将时间戳或其他新值添加到
    setValueParent()
    调用中,它将按预期工作)