te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - React functional components with methods - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - React functional components with methods - Stack Overflow

programmeradmin3浏览0评论

If we wanted to make a functional stateless ponent but we want methods that are able to access the props how would we do that? Is there like a general rule or best practice when it es to things like this

for example

function Stateless(props) {
   function doSomething(props) {
      console.log(props);
   }
  doSomething() // logs 'undefined'
return (
  <div> some stuff </div>
}

the inside props is always not the props that given, at least in my experience.

If I didn't need a state (using Redux) but still wanted methods that accessed props, is it still good practice to use classes and not stateless functions?

If we wanted to make a functional stateless ponent but we want methods that are able to access the props how would we do that? Is there like a general rule or best practice when it es to things like this

for example

function Stateless(props) {
   function doSomething(props) {
      console.log(props);
   }
  doSomething() // logs 'undefined'
return (
  <div> some stuff </div>
}

the inside props is always not the props that given, at least in my experience.

If I didn't need a state (using Redux) but still wanted methods that accessed props, is it still good practice to use classes and not stateless functions?

Share Improve this question asked Mar 2, 2019 at 6:37 christiancn7christiancn7 1752 gold badges3 silver badges10 bronze badges 2
  • 1 Why just call doSomething() without parameter? It seems that you have to change doSomething() to doSomething(props) to make sense – koo Commented Mar 2, 2019 at 6:45
  • 1 doSomething(/*props you are passing is undefined*/) – Yury Tarabanko Commented Mar 2, 2019 at 6:48
Add a ment  | 

3 Answers 3

Reset to default 4

It is perfectly fine to use functions inside functional ponents. In fact React hooks that were introduced recently in React 16.8, are all about making functional ponents even more convenient by bringing state and lifecycle events to the the functional ponents via special hooks.

But as others have mentioned you need to pass proper arguments to your functions: doSomething(props) or not pass arguments at all and correspondingly never expect them in function declaration itself: function doSomething().

doSomething() logs undefined because the inner props variable wasn't delivered when you called doSomething(missing props). You can either remove the inner props:

function Stateless(props) {
  function doSomething() {
    console.log(props);
  }
  doSomething();
  return (
    <div> some stuff </div>
  );
}

Or declare doSomething outside your ponent:

function doSomething(props) {
  console.log(props);
}
function Stateless(props) {
  doSomething(props);
  return (
    <div> some stuff </div>
  );
}

Both will work. The first might be easier, but if your ponent is redrawn often, the second is more performant, since you only declare doSomething once.

function Stateless(props) {
   function doSomething() { // 1. props is accessible inside the function so you can skip the parameter
      console.log(props);
   }
  doSomething();
return (
  <div> some stuff </div>
)//2. missing paranthesis
}
发布评论

评论列表(0)

  1. 暂无评论