如何在无状态组件中定义方法?

Yea*_*ats 21 reactjs

如果我只是:

const App = function() {
    return (
        <div>{this.renderList()}</div>
    )

}
Run Code Online (Sandbox Code Playgroud)

我该如何定义renderList方法?

我不能做const renderList = function() {}(也不能用varlet).我做不到renderList() {}.

什么是正确的语法?

Joh*_*ell 34

我对于解决这个问题犹豫不决,因为内联Stateless Functions不应该有方法.如果你想要一个方法你应该使用a Class并且使用类没有任何问题.一切都基于你需要做的事情.Stateless Functions被设计成一种超轻量级的方式来渲染不需要方法的东西,或者一个状态甚至是这个上下文(就类而言).

应该这样做.

class App extends Component {
    constructor(){
        super();
        // note this is a Stateless Component because its a react class without a state defined.
    }
    renderList = () => {
        return <span>Something Here</span>;
    }
    render() {
        return <div>{this.renderList()}</div>
    }
}
Run Code Online (Sandbox Code Playgroud)

我不推荐HACK方式(但确实以你想要的方式解决你的问题)就像这样.

const App = () => {
    let renderList = () => {
        return <span>Something Here</span>
    }
    return <div>{renderList()}</div>
}
Run Code Online (Sandbox Code Playgroud)

  • @JohnRuddell我赞赏你的耐心 (20认同)
  • @ivarni哈哈谢谢你.只是想帮助他理解.我曾经是他曾经的地方(但也许不那么具有攻击性......而且粗鲁......并且不愿意听).无论如何.Yeats忘记了无状态功能/组件或者你想要在一分钟内调用它的任何东西.想想基本的香草javascript.创建一个函数,看看这个是什么.创建一个类,看看这个是什么 (9认同)
  • 它的功能.它不是一个阶级.函数没有方法类.它是一个基本的JavaScript的东西.在es5中,它将是原型方法,但不是函数 (6认同)
  • 嘿@ebr我在路上所以我可能很简短,但是,这是一个坏主意的原因是因为你正在创建一个函数,并且每个渲染周期都需要所有的内存分配.随后,如果执行此操作,则提供反应的内部差异优化通常是无用的,因为新函数提供的签名与先前的渲染周期不同.如果你不需要状态,那么将该函数定义为独立的(不在你的组件函数内)并传递道具..基本上是另一个功能组件.这样,该函数在运行时创建一次.希望有所帮助! (6认同)
  • 文档从字面上称它们为无状态函数。来自文档的消息。.说它们是“道具的纯函数”,并且它们“必须不保留内部状态,不具有后备实例并且不具有组件生命周期方法。”没有生命周期方法。在文档人那里没有后备实例,也就是“ this.someMethod” (2认同)

ryu*_*ice 5

const App = function() {
  const renderList = ()=> {
      return "this variables"
     }

    return (
        <div>{renderList()}</div>
    )

}
Run Code Online (Sandbox Code Playgroud)

  • 为什么讨厌箭头功能? (10认同)

Abi*_*dun 2

你会想做这样的事情

const App = function() {

    return (
        <div>{renderList()}</div>
    )

}
  function renderList(){
      return "this variables"
     }
Run Code Online (Sandbox Code Playgroud)

当然,这是一个不好的方法,建议您传入函数,因为 props 和无状态组件始终是愚蠢的组件。例如,如果您使用的是 redux,您可以让您的组件像这样渲染

import {connect} from 'react-redux';
const App = (props) => {
   return (
      <div> {props.renderList} </div>
    )
}
function renderList (){
   return "your render logic"
}
export default connect(null, {renderList})(App)
Run Code Online (Sandbox Code Playgroud)