所以在按eslint的要求将其更改为纯函数之前,我有一个简单的类

 class user extends Component {
          render(){
            return(
              <Aux>
        <UserTable title="User" type="user" role={this.props.location.roleAction}/>
              </Aux>
            )
          }
        }
    export default user;


然后我得到eslint错误,说该组件应被编写为纯函数,然后我尝试将其更改为纯函数,例如下波纹管

    const user = () => (
      <Aux>
        <UserTable title="User" type="user" role={this.props.location.roleAction} />
      </Aux>
    );

export default user;


并将其更改为箭头功能后,我无法读取this.props.location.roleAction我收到一个错误“无法读取未定义的属性”位置”。为什么会发生这种情况?任何解决错误的方法,因此我可以使用箭头功能并能够读取属性。当我使用以前的书面组件时,它工作正常。

任何帮助将不胜感激。

最佳答案

在纯函数(“无状态功能组件”或SFC)形式中,您将收到prop作为参数:

const user = props => ( // <−−−− Here
  <Aux>
    <UserTable title="User" type="user" role={props.location.roleAction} />
                                              ^−−−−−− no `this` here since it's
                                                      a parameter
  </Aux>
);


这在文档here中进行了介绍。这是一个简单的可运行示例:



const Example = props => (
  <div>{props.text}</div>
);

ReactDOM.render(
  <div>
    <Example text="one" />
    <Example text="two" />
  </div>,
  document.getElementById("root")
);

<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

10-06 00:18