问题
这两天在使用React的时候遇到一些细节上的问题,比如
1、JS中类对象的定义语言使用JSON的语法规则表达;
2,function类的bind方法和函数的重载,以及变量作用域;
3,function对象和Lambda表达式,以及它们的函数体涉及的变量作用域的问题。
在使用组件对象、在组建类中写逻辑的时候语言上不够灵活,经常对语法缺乏信心。
解决思路
Q1:JS中用JSON定义对象的语法规则;
A1:查资料学习到了JS专门提供了JSON(JavaScript Object Notation)作为一种便捷的面向对象式的数据交换格式,引入了Key/Value系统,可以很方便地完成字符串到对象的转换;
Q2:在这段代码里的使用的bind方法的理解;
class HeadBar extends React.Component{
constructor(props){
super(props);
this.handleTaskTextInputChange=this.handleTaskTextInputChange.bind(this);
}
handleTaskTextInputChange(e) {
this.props.onTextInput(e.target.value);
}
A2:第二段中定义了handleTaskTextInputChange函数处理传入的事件对象e,因为handleTaskTextInputChange是个成员函数,而具体传给HTML<input>标签的回调只能接受一个参数e,所以需要提前把this引用bind给handleTaskTextInputChange的第一个隐式参数。绑定在构造函数中实现,而绑定一个的函数对象又命名为handleTaskTextInputChange,这是利用了它们作用域不同而已,与重载语义无关。
Q3:JS中function对象和Lambda表达式,以及它们函数体内的变量作用域;
A3:JS中Foreach方法的定义为
array.forEach(callback[, thisObject]);
第二个可选参数可以把一个对象的引用传进去,通常传入一个this,作为回调函数的调用者使用。
Lambda表达式:e=>callback;
JS中Lambda表达式简单得多,没有C++11提供的Lambda中那些关于解决变量穿透作用域使用的语义,但是灵活性也会差很多。
引起问题的原因
这些语法细节上的原因,是因为对JS不熟悉,另外对React的机制不清晰,很多语言在凭感觉写,当然会很心虚。
行动方法
在当前理解React并基本做完Demo的基础上,可以从JAVA、JS语法规则的基础上,仔细推敲在React那些神奇的过程中实现的语法依据,以及在它们内部对数据发生的处理和传递作用。