【发布时间】:2018-01-22 12:00:11
【问题描述】:
我会遇到一种情况,我必须从 array 动态获取 object 值,而 object keys 来自 api。我通过使用eval 来采用这种方法。
class App extends React.Component {
constructor() {
super();
this.state = {
title: 'Developers',
descp: 'They are just amazing! JK',
names: ['title', 'descp']
}
}
getVal(objKey) {
let { title, descp } = this.state;
return eval(objKey);
}
render() {
let {names} = this.state;
return (
<div>
<h2>{this.getVal(names[0])}</h2>
<div>{this.getVal(names[1])}</div>
</div>
)
}
}
ReactDOM.render(<App />, document.getElementById('root'));
<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="root"></div>
上面的代码可以正常工作。
我后来发现的另一种方法:
render() {
let {names} = this.state;
return (
<div>
<h2>{this.state[names[0]]}</h2>
<div>{this.state[names[1]]}</div>
</div>
)
}
输出相同的结果。但我的问题是,如果我在以下情况下使用eval,这是一个好方法吗?
【问题讨论】:
-
除非绝对必要,否则我会避免使用
eval。括号符号在这里可以正常工作。 -
你认为
eval是什么让你接触到了它?在这种情况下,它既不合适也没有帮助。老实说,我很好奇为什么? -
你后面的做法是正确的。我个人会避免使用
eval(),但是当你有一个绝对不需要它并返回正确结果的解决方案时,永远不要使用它。 -
@Chris 这与 React 或 JSX 无关。
-
@Chris 就像 Aluan 所说,OP 的问题与 React 或 JSX 无关。这是关于通过字符串访问对象的属性。围绕它的所有 React 完全无关紧要。
标签: javascript reactjs ecmascript-6