在React组件中分配带有ES6的属性
Assigning a property with ES6 in a React Component
我是ES6的新手,仍在努力掌握新规范的概念,我目前正在React中开发一个组件,在那里我需要进行ajax调用并将此响应存储在对象中。然后使用这个对象来映射必要的元素
我的组件看起来像下面的
export class App extends Component {
search(){
//make ajax call
response = obj.responseText;
}
getValues(){}
render(){
let result = response.data.map(this.getValues);
return(
<div onKeyDown={this.search.bind(this)}>{result}</div>
)
}
}
如何全局声明从ajax调用"obj.responseText"分配数据的"response"变量?
你似乎知道自己想要实现什么,但对如何实现有点困惑。
我强烈建议您在进一步阅读React文档之前阅读该文档。
为什么不使用全局变量
如何全局声明
response
变量?
简而言之,不要。全局变量被充分证明是邪恶的。在一个带有全局变量来存储搜索结果的页面中,该组件的一个实例是可以的,但想象一下,如果你有两个或多个实例,它们都会共享/覆盖彼此的搜索结果。
介绍状态
相反,您希望使用React的组件状态功能来存储搜索结果。
您可以通过在组件的构造函数中设置组件的this.state
来设置初始状态(或者在ES5中,在组件上定义getInitialState
方法)。
然后,任何时候想要更新组件的状态,都可以调用其this.setState(...)
方法,传入一个新的状态对象。这也将触发组件的重新渲染。
示例
下面是一个遵循上述模式的简单实现:
export class App extends Component {
// Set the initial state of the component in the constructor
constructor(props) {
super(props);
this.state = {};
}
// This gets called when your component is mounted
componentDidMount() {
// Here we make our AJAX call. I'll leave that up to you
performMyAjaxMethodDefinedSomewhereElse(result => {
// We call this method to update `this.state` and trigger re-rendering
this.setState({ result });
});
}
render() {
// If we haven't received any results yet, display a message
if (!this.state.result) {
return (
<div>No results!</div>
);
}
// Iterate over the results and show them in a list
const result = this.state.result.map(text => (<li>{text}</li>));
// Display the result
return (
<ul>{result}</ul>
);
}
}
当然,如果您不希望AJAX调用立即启动,您可以使用非常类似的方法,用看起来几乎相同的事件处理程序替换componentDidMount
。
相关文章:
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- ES6非结构化中的计算属性-非结构化整体对象
- 观察ES6模块属性
- Javascript ES6 的属性和支持值命名约定
- 原型上具有默认属性的es6类在traceur中抛出
- 如何使用ES6在Ember中声明可观察性或计算属性
- 重构作为属性从 es5 传递到 es6 的函数
- 如何从 promise 内部访问 JavaScript 类的属性?(使用 ES6 而不是 Self)
- 在 ES6 中,允许解构类实例属性
- 无法在 es6 继承的类中设置属性
- ES6 类属性定义
- 在 ES6 中自动将参数设置为实例属性
- 从 ES6 中内联的属性子集创建对象
- 浅拷贝对象在 ES6/ES7 中省略一个或多个属性
- 在 ES6 类中具有私有属性和方法
- 访问内部属性名称以计算 ES6 中的新属性
- ES6计算(动态)属性名称
- 使用(ES6)计算的属性名称更新嵌套对象
- 为ES5或ES6中对象的嵌套属性简明定义Getter和Setter
- 在React组件中分配带有ES6的属性