What does “Stateless function components cannot be given refs” mean?

匿名 (未验证) 提交于 2019-12-03 02:56:01

问题:

I have this:

const ProjectsSummaryLayout = ({projects}) => {    return (       <div className="projects-summary col-md-10">           <h3>Projects</h3>           <ul>               { projects.map(p => <li key={p.id}>{p.contract.client}</li>) }           </ul>       </div>    ) }  const ProjectsSummary = connect(    state => ({projects: state.projects}) )(ProjectsSummaryLayout) 

and I get:

Warning: Stateless function components cannot be given refs (See ref "wrappedInstance" in ProjectsSummaryLayout created by Connect(ProjectsSummaryLayout)). Attempts to access this ref will fail.

What is it trying to tell me? Am I actually doing something wrong?

I see discussion about this here but unfortunately I simply don't understand the conclusion.

回答1:

In React, refs may not be attached to a stateless component.

As I understand it, React Redux 3 attaches a ref to the component you give it regardless of whether or not it's stateless. The warning you see comes from React because internally, React Redux 3 attaches a ref to the stateless component you supplied (ProjectsSummaryLayout).

You're not doing anything wrong and according to this GitHub comment, you can safely ignore the warning.

In React Redux 4, no ref is attached to the wrapped component by default, which means if you upgrade to React Redux 4, the warning should go away.



回答2:

React has 2 commonly used component styles.

  • Functional Component
  • Class Component

So, When I was making use of Functional one then I was encountering this error.

Code snippet corresponding to Functional Component

But as soon as I changed it to Class Component then it worked.

Code snippet corresponding to Class Component.

Try changing Functional Component to Class Component. I hope it will resolve your problem.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!