假设我有一些组件,我通过了一个功能。
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()}}
之间的区别在哪里?
答案 0 :(得分:2)
差异实际取决于onLayout
的触发方式和时间。
onLayout={this._someFunc()}
每次渲染组件时,onLayout
道具都会从this._someFunc()
函数中获取返回值。换句话说,该函数将在每个渲染上运行。
onLayout={() => {return this._someFunc()}}
或onLayout={() => this._someFunc()}
每次渲染组件时,onLayout
prop都会将引用绑定到一个匿名函数,该函数包含对_someFunc()
函数的调用。除非以某种方式触发onLayout
,否则后一个函数不会被执行。
例如,假设以下组件:
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;
在组件A
中,foo
道具将获得"bar"
的值。
在组件B
中,foo
道具将是您稍后可以调用的函数的引用。该功能将依次调用_someFunc
,这将返回"bar"
。因此,如果要在组件B
中获取值,则需要使用this.props.foo()
调用它。