'这'在React组件函数中未定义

时间:2017-07-16 22:43:33

标签: javascript reactjs ecmascript-6 ecmascript-next

当我尝试执行以下代码时,函数thisrenderContents的值为undefined

我原以为胖箭头功能会自动绑定。这不是这种情况吗?如果没有,我如何确保将this传递给函数renderContents

代码示例:

class Box extends React.Component {
  renderContents = () => {
      console.log(this); // undefined
      return (
        <div></div>
        )
  }

   render() {
      const { 
        someValue,
      } = this.props;

      return (
            <div>
              {someValue ? this.renderContents() : null}
            </div>
            );
    }
  }

3 个答案:

答案 0 :(得分:1)

没有错。我刚刚这样称呼它:

ReactDOM.render((<Box someValue={true} />), document.getElementById('content'));

我得到了 这个 的价值:

enter image description here

所以我认为问题是,你没有正确地说,你设置 someValue ??

答案 1 :(得分:-1)

你在renderContent方法中犯了错误。您将其声明为函数,并且它没有组件的上下文。 请尝试声明这样的方法:

[DllImport("UNZDLL32.DLL", CharSet = CharSet.Auto)]
public static extern void UNZ_GETERRORTEXT(long hUnz, StringBuilder ErrorText);
// or
[DllImport("UNZDLL32.DLL", CharSet = CharSet.Auto)]
public static extern void UNZ_GETERRORTEXT(long hUnz, ref string ErrorText);`

取而代之的是:

UNZDLL32.DLL

答案 2 :(得分:-3)

您是否尝试过添加构造函数方法?

protected function create(array $data)
{
    // $referred_by = User::where( 'affiliate_id', Cookie::get( 'referral' ) )->first();
    // $referred_user = Cookie::get( 'referral' );

    return User::create([
        'name'         => $data['name'],
        'email'        => $data['email'],
        'password'     => bcrypt($data['password']),
        'affiliate_id' => $this->uniqueRandomString(),
        'referred_by'  => Cookie::get('referral'),
    ]);
}

编辑:

您可以在构造函数中绑定上下文,而不是使用箭头函数:

constructor(props) {
    super(props)
}

在react类中,只是隐式绑定了一些方法(render,componentDidMount,componentWillUnmount等),你必须在构造函数中手动绑定其他方法或使用箭头函数。