我有一个关于es6箭头函数的问题(在react中的示例中)。在我的示例代码中,我只想调用函数insight另一个函数。它只在我使用es6时起作用。我一直在网上阅读,但我不太明白为什么它只适用于es6。
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
}
this.handleInput = this.handleInput.bind(this);
this.testing = this.testing.bind(this);
}
testing(){
console.log("hello")
}
handleInput(){
...
.then(function(){
this.test() //doesnt work
test() //doesnt work
})
.then => res{
// I actually don't require parameters, but it's
// never working unless I use this syntax
.this.test() // WORKS
}
}
render() {
return (
<div>
Hello {this.props.name}
</div>
);
}
}
当您使用非箭头函数时,上下文集是新的,而不是从外部函数继承的。如果您使用箭头函数,那么它将按预期工作。上下文将是外部的。请参阅此示例,箭头函数如何持久化上下文
const PollOption = ({options,selected, onChange, myTest}) => {
console.log("addafafdj", myTest)
return (
<div className="pollOption">
{options.map((choice, index) => (
<label key={index}>
<input type="radio"
name="vote"
key={index}
onChange={(e)=>onChange(e,index)}/>
{choice.tag}
</label>
))}
</div>
);
};
const VoteCount = ({totalVotes, options}) =>{
return(
<div className="VoteCount">
<h2>Total Votes {totalVotes}</h2>
<ul>
{options.map((element,index)=>(
<li>{element.tag}: {element.count}</li>
))}
</ul>
</div>
);
}
class OpinionPoll extends React.Component{
constructor(props) {
super(props);
this.state = {
selectedOption: 0,
totalVotes: 0,
choiceOneVotes: 0,
choiceTwoVotes: 0,
options: [
{tag:"A", count:0},
{tag:"B", count:0},
{tag:"C", count:0},
{tag:"D", count:0}
]
}
}
handleClick(){
console.log('submitted option', this.state.selectedOption);
this.setState(prevState => {
return {totalVotes: prevState.totalVotes + 1}
})
const selectedIndex = this.state.selectedOption
const newOption = [...this.state.options]
debugger
newOption[selectedIndex].count += 1
this.setState({
options: newOption,
})
}
test(value) {
console.log("promise worked", value)
}
handleOnChange(e,index){
console.log('selected option', index);
this.setState({
selectedOption: index
});
const newPromise = new Promise((resolve,reject)=> {
setTimeout(()=> {
resolve("11232")
},1000)
})
newPromise.then((value)=> {
this.test(value)
})
console.log("state in handlechange",this.state)
}
render(){
const myTest = "hola boy"
return (
<div className="poll">
{this.props.model.question}
<PollOption
myTest
options={this.state.options}
onChange={(e,index) => this.handleOnChange(e,index)}
selected={this.state.selectedOption}/>
<button onClick={() => this.handleClick()}>Vote!</button>
<VoteCount
totalVotes={this.state.totalVotes}
options={this.state.options}
/>
</div>
);
}
}
var json = {
question: 'Do you support cookies in cakes?',
choices:
[
{text: "Yes", value: "yes"},
{text: "No", value: "no"}
]
}
const root = document.getElementById("root");
ReactDOM.render(<OpinionPoll model ={json} />, root)
//ReactDOM.render(<div>test </div>, root)
因为您正在失去本机函数的上下文。
让我解释一下。如果像“this.test()”那样为“function test()”调用func,则从当前调用上下文调用它。因此,“this”关键字将包含函数调用方的上下文环境。相反,箭头函数始终将上下文与创建它们的对象或函数相匹配。
新的“胖箭头”符号还可以用更简单的方式来定义匿名函数。 请看下面的例子: console.log(x); incrementedItems.push(x+1); }); 计算一个表达式并返回值的函数可以被定义更简单: 下面代码与上面几乎等价: incrementedItems = items.map(function (x) { return x+1; 让我们在 验
问题内容: class App extends Component { constructor(props) { … } 在类中声明的两种函数 (onChange和onSubmit) 之间有什么区别?如果我将其声明为ES6类方法,但在 const url中 引用this.sate时出现错误,但是将其更改为arrow函数可以解决此问题。 我想知道两种情况下如何正确处理“ this” 另外,我该如何做
主要内容:1.语法变化,2.带参数的箭头函数,3.带有默认参数的箭头函数,4.带有Rest参数的箭头函数,5.无括号的箭头函数,6.箭头函数的优点ES6中引入了箭头(Arrow)函数,它提供了一种更准确的JavaScript编写方法。 它们让我们能够编写较小的函数语法。 箭头函数的代码更具可读性和结构性。 箭头函数是匿名函数(没有名称且未与标识符绑定的函数)。 它们不返回任何值,并且可以在不使用关键字的情况下进行声明。 箭头函数不能用作构造函数。 箭头函数中的上下文是按词汇或静态方式定义的。 它
问题内容: 我是React的新手,正在尝试了解语法。 我正在React 15环境中进行开发(使用react-starterify模板),并且一直在使用下面的VERSION 2中的语法,但是,我在Facebook的React页面上发现的大多数示例和教程都是VERSION 1。这两个,何时应在另一个之上使用? 版本1 版本2 问题答案: 第二个代码是 无状态功能组件, 并且是用于将组件定义为的函数的新
本文向大家介绍ES6箭头函数的特性?相关面试题,主要包含被问及ES6箭头函数的特性?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: ES6 增加了箭头函数,基本语法为 let func = value => value; 相当于 let func = function (value) { return value; }; 箭头函数与普通函数的区别在于: 1、箭头函数没有this,所以需要通
本文向大家介绍JavaScript ES6箭头函数使用指南,包括了JavaScript ES6箭头函数使用指南的使用技巧和注意事项,需要的朋友参考一下 胖箭头函数(Fat arrow functions),又称箭头函数,是一个来自ECMAScript 2015(又称ES6)的全新特性。有传闻说,箭头函数的语法=>,是受到了CoffeeScript 的影响,并且它与CoffeeScript中的=>语