javascript – 内部和外部的函数render()
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 内部和外部的函数render(),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3040字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 内部和外部的函数render()](/upload/InfoBanner/zyjiaocheng/789/787b79cfe5a541678ca7262b0ec0f17c.jpg)
我刚刚开始学习React和JavaScript.在我阅读了文档和教程之后,我看了一些示例项目,并尝试理清我还没有得到的内容.
然后我看到有些函数在render()函数中定义,有些函数在render()函数之外.
例如.对于render()的外部:
handleClick(e) {
e.preventDefault();
e.target.parentElement.classList.toggle('open');
}
在里面渲染()……
const divider = (divider, key) => {
const classes = classNames( 'divider', divider.class);
return (<li key={key} className={ classes }></li>);
};
为什么它们看起来如此不同?你为什么要在render()里面有一些函数?
编辑:
另一个render()之外的函数示例:
hideMobile() {
if (document.body.classList.contains('sidebar-mobile-show')) {
document.body.classList.toggle('sidebar-mobile-show')
}
}
编辑2:在另一个线程中有人回答说,如果函数背后的逻辑很重,它应该在render()之外.但是你为什么要在render()中使用函数呢?
解决方法:
来自official site:的例子
首先,如果我们想在开始时构建一个Clock,那么我们就尝试使用无状态函数对象创建一个面向对象,可维护的组件.
function Clock(props) {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {props.date.toLocaleTimeString()}.</h2>
</div>
);
}
function tick() {
ReactDOM.render(
<Clock date={new Date()} />,
document.getElementById('root')
);
}
setInterval(tick, 1000);
来自doc的引用
to make the Clock component truly reusable and encapsulated. It will
set up its own timer and update itself every second.…
Ideally we want to write this once and have the Clock update itself…
所以在这里它是React的精神,我们希望将这个函数对象转换为一个可以自我维护的类,所以现在我们涉及render(),更具体地说我们涉及有状态的组件:
Add a single empty method to it called render()
...
Clock is now defined as a class rather than a function.
然后我们得到:
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
this.clockCore = this.clockCore.bind(this);
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
tick() {
this.setState({
date: new Date()
});
}
clockCore() {
return (<div>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>);
}
render() {
return this.clockCore();
}
}
如您所知,如果组件的状态需要由setState()刷新,则再次触发render().
更新
在我看来,没有必要在render()中定义函数.
我对上面的原始示例进行了一些修改,以表明这一点.
从您提供的示例中,divider的用法可能如下:
const divider = (divider, key) => {
const classes = classNames( 'divider', divider.class);
return (<li key={key} className={ classes }></li>);
};
return (<ul>{this.state.dividerList?
this.state.dividerList.forEach(divider) : null}</ul>);
我认为这样做的原因只是为了可维护性,有人可能希望所有DOM在render()中创建代码以便在返回DOM结构时很容易跟踪(和arrow function is lightweight),但正如我所说它是主观的,它确实可以被定义外.
在这种情况下,我习惯在下面做,而且看起来你提供的更优雅,但是如果你在render()之外定义了这个函数,那么事情就会让我感到分心.
let dividers = [];
if (this.state.dividerList) {
this.state.dividerList.forEach((divider, key) => {
let classes = classNames( 'divider', divider.class);
dividers.push((<li key={key} className={ classes }></li>));
});
}
return (<ul>{dividers}</ul>);
因此,您提供的另一个针对DOM操作功能的功能是完全正确的,并且可以在外部定义.
内容总结
以上是互联网集市为您收集整理的javascript – 内部和外部的函数render()全部内容,希望文章能够帮你解决javascript – 内部和外部的函数render()所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。