首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >避免React子组件中的陈旧数据属性

避免React子组件中的陈旧数据属性
EN

Stack Overflow用户
提问于 2020-12-05 00:12:59
回答 1查看 101关注 0票数 0

在父组件中,我将状态变量数据作为道具传递给子组件。通过fetch/UseEffect获取数据。URL参数可以通过单击按钮进行修改,根据参数的不同,将获取一个完全不同的对象,这需要在子组件中进行不同的处理。

代码语言:javascript
运行
AI代码解释
复制
export default function ParentComponent() {
  const [data, setData] = useState({})
  const [param, setParam] = useState('')
  const [isLoading, setLoading] = useState(true)

  useEffect(() => {
    const fetchData = async () => {
      const data= await (await fetch(`https://myapi.com/?param=${param}`)).json()

      setData(data)
      setLoading(false)
    }

    fetchData()
  }, [param])

return (<div>
    { isLoading ? 
      (<span>Loading...</span>)           
      : 
  (<div>
    <button onClick={() => setParam('something')}>Click me</button>
      <ChildComponent data={ data } />
  </div>

      </div>)
   }
}

我的问题是,每当我点击parent中的按钮(设置状态),这会触发重新渲染,组件会重新渲染两次(导致下面的console.log打印两次),我敢说这是预期的行为,一次是因为setParam,一次是在fetchData和setData完成时)。

代码语言:javascript
运行
AI代码解释
复制
export default function ChildComponent(props) {
    const { data } = props

    return (
    <div>

    // Prints twice, first stale data, then when fetchData has completed.
    { console.log(data )}

    </div>)
}

我要问你们的问题是,我已经在这里(Avoid old data when using useEffect to fetch data)和React.js Hooks常见问题解答(https://reactjs.org/docs/hooks-faq.html)上读了克里斯W的帖子几个小时了,是如何在上帝的绿色地球上(抱歉,任何无神论者!)我只能访问子组件中新获取的、非陈旧的数据属性,而忽略陈旧的数据属性?是通过裁判吗?UseEffect?(我知道我可以在带有数据作为依赖项的子组件中创建一个UseEffect,但是,我应该如何处理它,毕竟我正在尝试控制返回的内容?)

提前感谢您的回复!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-05 00:41:58

我建议考虑使用useMemo API来解决这个问题:

代码语言:javascript
运行
AI代码解释
复制
const MemoizedChildComponent = useMemo(({ data }) => <ChildComponent data={data} />, [data]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65152439

复制
相关文章
react子组件向父组件传递数据_react子组件改变父组件的状态
本博客代码是 React 父组件和子组件相互传值的 demo;实现封装一个折线图,折线图选择下拉框,获取下拉框点击的值并且传给父组件根据下拉框筛选的条件更新视图;效果图如下:
全栈程序员站长
2022/10/03
3.7K0
react子组件向父组件传递数据_react子组件改变父组件的状态
react中父组件向子组件传值
子组件中只能使用不能修改父组件传递过来的数据!!!如果非要修改,那就父组件传递一个方法给子组件,子组件使用这个方法来改变父组件中的数据。这就是react的单项数据流(父组件传递给子组件,不可以在子组件中改变)
全栈程序员站长
2022/09/01
2.5K0
vue父组件中获取子组件中的数据
<FormItem label="上传头像" prop="image"> <uploadImg :width="150" :height="150" :name="'avatar'" size="150px*150px" ref="avatar"></uploadImg> </FormItem> <FormItem label="上传营业执照" prop="businessLicence"> <uploadImg :width="350" :heigh
蓓蕾心晴
2018/04/12
7K0
React父组件调用子组件的方法
React组件化开发中子组件可以通过传递变量或者父组件的方法来实现和父组件的通信或者调用函数传值,但是父组件如何调用子组件的方法呢?很多介绍Hooks的文章并没有讲到useImperativeHandle,我以使用React18+TypeScript开发的项目为例,组件使用Hooks。以下是我精简过后的代码。
用户6256742
2022/07/06
5.8K0
子组件传对象给父组件_react子组件改变父组件的状态
sendData = () => { let data = ‘1234’; this.props.getData(data); //这个this,props.xxx 后面的xxx是是在父组件那使用的名字; }, 然后可以在render函数后使用这个方法或者另外定义一个事件去触发该方法进行传值,
全栈程序员站长
2022/10/04
2.9K0
React中父组件执行子组件的函数 使用class + onRef写法
在React中,父组件执行子组件的函数的写法如下 父组件中 添加函数 onRef = (ref) => { this.child = ref } 在使用子组件时 <ChildComponet onRef={this.onRef} /> onRef是固定的用法, 在子组件里 componentDidMount(){ this.props.onRef(this) } 父组件执行子组件的函数 submitFun = () => { this.child.onReset(); }
拿我格子衫来
2022/01/24
3.6K0
vue父组件调用子组件属性_vue子组件获取父组件实例
但是在vue3中,很显然使用this.$emit() 已经开始报错了,为什么会报错呢?
全栈程序员站长
2022/11/10
2.1K0
React的Refs方法获取DOM实例 和 访问子组件方法及属性
React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上。
小弟调调
2018/10/18
5K0
React基础(6)-React中组件的数据-state
一个组件最终渲染的数据结果,除了prop还有state,state代表的是当前组件的内部状态,你可以把组件看成一个'状态机",它是能够随着时间变化的数据,更多的是应当在实现交互时使用,根据状态state的改变呈现不同的UI展示
itclanCoder
2019/11/04
6.2K0
vue 父组件调用子组件_react父组件向子组件传值
1.直接在子组件中通过“this.$parent.event”来调用父组件的方法。
全栈程序员站长
2022/11/15
1.9K0
React基础(5)-React中组件的数据-props
开发一个React应用,更多的是在编写组件,而React组件最小的单位就是React元素,编写组件的最大的好处,就是实现代码的复用
itclanCoder
2019/09/28
6.8K0
React基础(5)-React中组件的数据-props
React学习(六)-React中组件的数据-state
一个组件最终渲染的数据结果,除了prop还有state,state代表的是当前组件的内部状态,你可以把组件看成一个'状态机",它是能够随着时间变化的数据,更多的是应当在实现交互时使用,根据状态state的改变呈现不同的UI展示
itclanCoder
2020/10/28
3.7K0
React学习(六)-React中组件的数据-state
React学习(五)-React中组件的数据-props
开发一个React应用,更多的是在编写组件,而React组件最小的单位就是React元素,编写组件的最大的好处,就是实现代码的复用
itclanCoder
2020/10/28
3.5K0
React学习(五)-React中组件的数据-props
angularjs子组件向父组件传值_react子组件传值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/03
1.9K0
React的class组件及属性详解!
React 有两种组件:class组件 和 函数组件。class组件需要继承 React.Component,用法如下:
Learn-anything.cn
2021/11/28
3.1K0
React saga_react获取子组件ref
React的作用View层次的前端框架,自然少不了很多中间件(Redux Middleware)做数据处理, 而redux-saga就是其中之一,目前这个中间件在网上的资料还是比较少,估计应用的不是很广泛,但是如果使用得当,将会事半功倍的效果,下面仔细介绍一个这个中间件的具体使用流程和应用场景。
全栈程序员站长
2022/09/27
4.5K0
React saga_react获取子组件ref
React :(类、函数)子组件调用父组件的方法
子组件中使用传过来的cancelCreateFile【this.props.cancelCreateFile】,就可以在子组件中调用
江一铭
2022/09/23
5.3K0
React :(类、函数)子组件调用父组件的方法
Vue 子组件调用父组件的属性,方法「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
2.9K0
在 Vue 中,父组件中传递数据给子组件
在父组件中传递数据给子组件。在 Vue 中,可以通过 props 属性来实现父组件向子组件传递数据的功能。
王小婷
2023/09/11
3610
react 子组件向父组件传值_vue父组件给子组件传值
父组件给子组件传递数据,直接用属性名传递,子组件通过props获取父组件传递过来的值
全栈程序员站长
2022/10/03
2.8K0

相似问题

react组件中显示的陈旧数据

23

React类将陈旧的属性传递给子无状态组件

111

反应:子组件中陈旧的道具

13

Redux避免陈旧数据?

219

避免在React中重新渲染子组件

245
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文