反应原生中使用函数的差异

时间:2017-09-13 08:05:58

标签: javascript reactjs react-native

假设我有一些组件,我通过了一个功能。

export default class SomeComp extends Component {
    constructor(props) {
        super(props);
    }

    _someFunc = () => {
        return ...
    }

    render() {
        return (
            <View
                onLayout={this._someFunc()}
            />

OR

            <View
                onLayout={() => {this._someFunc()}}
            />

        )
    }
}

onLayout={this._someFunc()}onLayout={() => {this._someFunc()}}之间的区别在哪里?

1 个答案:

答案 0 :(得分:2)

差异实际取决于onLayout的触发方式和时间。

  • onLayout={this._someFunc()}

    每次渲染组件时,onLayout道具都会从this._someFunc()函数中获取返回值。换句话说,该函数将在每个渲染上运行。

  • onLayout={() => {return this._someFunc()}}onLayout={() => this._someFunc()}

    每次渲染组件时,onLayout prop都会将引用绑定到一个匿名函数,该函数包含对_someFunc()函数的调用。除非以某种方式触发onLayout,否则后一个函数不会被执行。

例如,假设以下组件:

&#13;
&#13;
class MyApp extends React.Component {

  _someFunc = () => {
    return "bar";
  }

  render() {
    return(
      <div>
        <A foo={this._someFunc()} />
        <B foo={() => {return this._someFunc()}} />
      </div>
    );
  }
}

const A = ({foo}) => {
  console.log(foo);  //prints "bar"
  return <div>A</div>;
}

const B = ({foo}) => {
  console.log(foo);  //prints the reference to _someFunc()
  console.log(foo());  //prints "bar"
  return <div>B</div>;
}

ReactDOM.render(<MyApp />, document.getElementById("app"));
&#13;
<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>
<div id="app"></div>
&#13;
&#13;
&#13;

在组件A中,foo道具将获得"bar"的值。

在组件B中,foo道具将是您稍后可以调用的函数的引用。该功能将依次调用_someFunc,这将返回"bar"。因此,如果要在组件B中获取值,则需要使用this.props.foo()调用它。