React ES6中render()方法里this.state无法正常工作的原因
React中render()里this.state无法正常工作的原因及修复方案
未初始化组件的初始state
ES6类组件中,必须在构造函数里初始化state,否则组件挂载时this.state为undefined,render中访问this.state.stockChartXValues会直接报错。需要添加构造函数并设置初始state:constructor(props) { super(props); this.state = { stockChartXValues: [], stockChartYValues: [] }; }API返回数据的键名错误
你调用的是TIME_SERIES_INTRADAY(5分钟间隔)接口,返回数据的时间序列键名应为"Time Series (5min)",而非代码里的"Time Series(Daily"(键名错误且括号未闭合)。同时建议用Object.keys遍历对象,避免遍历到原型链属性:// 修正键名并优化遍历逻辑 const timeSeriesKey = "Time Series (5min)"; if (data[timeSeriesKey]) { Object.keys(data[timeSeriesKey]).forEach(key => { stockChartXValuesFunction.push(key); stockChartYValuesFunction.push(data[timeSeriesKey][key]["1. open"]); }); }render时未处理state为空的异步场景
API请求是异步操作,第一次render时state还未被更新,直接访问this.state.stockChartXValues可能导致组件报错,需添加空值保护:render() { const { stockChartXValues, stockChartYValues } = this.state; return ( <div> <Plot data={[ { x: stockChartXValues || [], y: stockChartYValues || [], type: "scatter", mode: "lines+markers", marker: { color: "red" }, }, ]} layout={{ width: 720, height: 440, title: "A Fancy Plot" }} /> </div> ); }可选优化:用箭头函数简化this绑定
你当前用pointerToThis保存this的方式可行,但ES6箭头函数会自动继承外层作用域的this,可简化代码:fetch(API_CALL) .then(response => response.json()) .then(data => { // 此处this直接指向组件实例,无需额外保存 // ...数据处理逻辑 this.setState({ stockChartXValues: stockChartXValuesFunction, stockChartYValues: stockChartYValuesFunction, }); });
内容的提问来源于stack exchange,提问作者Ved Pawar
相关产品推荐
相关产品推荐

