当前位置: 首页 > 知识库问答 >
问题:

根据来自父级的异步输入刷新React子功能组件

暴阳州
2023-03-14

我是一个react Noob(以前在angular工作过很多次),我有一个关于根据父母的输入刷新react功能性子组件的问题。

下面这个例子中的问题是,我试图从一个promise中获取一些数据,然后将它们作为道具传递给一个子组件。我用一个道具值“fake Url 1”初始化子级,并用useEffect()中的promise中的值替换它,这是组件加载后加载的第一个钩子。但即使我从父母那里换了道具,孩子也不清爽。

我尝试了1)所以在promise完成后,我改变了孩子的“道具”。难道不应该用新的道具重新呈现孩子吗?(我认为道具类似于angular中的输入和输出)2)我确实试图改变父级的状态并强制完全重新加载,但这引发了一个无限循环,不知道为什么。我尝试的代码是==>https://codepen.io/rohit2219/pen/mddppag

const { useEffect } = React;
const { useState } = React;

const Child = props => {
  let childUrl = props.url;

  //return (<div>{props.user}</div>)
  return <div>Child url : {childUrl}</div>;
};

const Parent = () => {
  let childData = "Fake Url 1";
  const [state, setState] = useState(false);

  useEffect(() => {
    childData = "Fake Url 2";
    let promise = axios.get(`https://api.github.com/users/mojombo`);
    promise.then(function(data) {
      console.log(data);
      childData = data.data.url;
      //setState(true) >> This state change triggered an infinite loop
      console.log("childData:");
    });
  });
  return (
    <div>
      <h1>Hello, World</h1>
      <Child url={childData} />
    </div>
  );
};

ReactDOM.render(<Parent />, document.getElementById("app"));

我确实看到了许多针对基于类的React组件的例子,比如下面,但对于功能性组件却一无所获。从父组件更新子组件的状态

共有1个答案

太叔马鲁
2023-03-14

您应该将一个空数组作为依赖项传递给useEffect(ChildData),以确保效果只运行一次(componentDimmount),否则每次调用setstate,都会触发一个新的呈现,再次调用效果,等等。

  useEffect(() => {
    childData = "Fake Url 2";
    let promise = axios.get(`https://api.github.com/users/mojombo`);
    promise.then(function(data) {
      console.log(data);
      childData = data.data.url;
      //setState(true) >> This state change triggered an infinite loop
      console.log("childData:");
    }, [childData])

ChildData既没有绑定到状态也没有绑定到道具它只是一个let,React不知道如何对它的更改做出反应。

const Component = () =>{
    const [childProp, setChildProp] = useState('foo')

    useEffect(() => setChildProp('bar'),[])

    return <Child childProp={childProp} />
}
 类似资料:
  • 该父级接收“props.id”并将数据值传递给由getAttributes()返回的子级。 在child上,我可以在控制台和componentWillReceiveProps中看到props值,但数组没有呈现。我尝试使用react-devtool。在react-devtool中,道具似乎传递给了孩子,但不是渲染。有趣的是,在react-devtool中,当我改变数组的一些元素时,数组正在呈现。 我

  • 我试图将一些信息从子项中的输入字段传递给父项。 到目前为止我所掌握的是: 34 this.setstate({searchstring:event.target.value},()=>{ >35 this.props.onchild(this.state.SearchString); 希望有人能帮忙。顺便说一句,我是个小人...

  • 我创建了一个包含登录组件和注册组件的签名页面组件。我的问题是,我如何传递一个onhtml函数从父到子,以便更改我的父组件(签名页组件)的状态?我期望的是,通过单击子组件中的按钮,可以切换父组件的活动状态,并根据活动状态更改样式。我试图通过一个处理功能从父到子,但它不能很好地工作。 有什么解决办法吗? codesandbox中的详细信息:https://codesandbox.io/s/wizard

  • 诉求:react父组件某些值改变后,需要让子组件同步更新,但是这个过程不能让父组件重新渲染 请帮忙罗列下所有可能的方式

  • 本文向大家介绍vue同步父子组件和异步父子组件的生命周期顺序问题,包括了vue同步父子组件和异步父子组件的生命周期顺序问题的使用技巧和注意事项,需要的朋友参考一下 关于vue组件的引入方式有两种 一、 同步引入 例子: import Page from '@/components/page' 二、异步引入 例子:const Page = () => import('@/components/pag

  • 我是新来的反应,我有一个问题,也许很简单,但我还无法弄清楚。 我有一个调用const组件子组件的const组件父组件,我想要的是将值从父组件传递给子组件,如果值在子组件中被编辑,父组件可以访问编辑后的值。 我想要的是这个,下面的const组件是子组件,它只是渲染一个地图,如果您单击它设置const selectedPotionwith经度和纬度,我希望const组件父组件传递经度和纬度的初始值,每