一段时间以来我一直在使用react,并且观察到我通常不从函数返回任何东西,而只是调用函数,更改全局变量等等。
例如考虑我的index.js file in react app
在这里,我具有此功能,用于格式化图形数据
graphDataFormating = () => {
let m = 0
let arrayPush = []
let data = this.state.data["groups"]
let Datalength = this.state.data["groups"].length
this.graphdata = []
if (!this.state.optionalTask) Datalength = 1
for (let i=0; i<Datalength; i++) {
for (let j=0; j<data[i]["peaks"].length; j++) {
arrayPush = []
for (let k=0; k<data[i]["peaks"][j]["eic"]["rt"].length; k++) {
if (this.state.filterIntensity < data[i].peaks[j]["eic"]["intensity"][k] && this.state.filterRt < data[i].peaks[j]["eic"]["rt"][k]) {
arrayPush.push({
y: (data[i]["peaks"][j]["eic"]["intensity"][k]/1000),
x: data[i]["peaks"][j]["eic"]["rt"][k]
})
}
}
this.graphdata[m] = arrayPush
m++
}
}
this.setState({graphData: this.graphdata})
}
在这里,我没有返回任何东西,而是更改了全局变量(例如this.graphdata [m])或状态为this.setState({graphData: this.graphdata})
现在,我在程序中多次调用了此函数
userFilterData = (event) => {
this.setState({[event.target.name]: event.target.value}, () => {
this.graphDataFormating()
})
}
resetData = () => {
this.setState({ filterIntensity: -1, filterRt: -1}, () => {
this.graphDataFormating()
})
}
changetask = () => {
this.setState({ optionalTask: !this.state.optionalTask}, () => {
this.graphDataFormating()
})
但是我创建的所有函数包括graphDataFormating()
,甚至一次都没有返回任何东西。
并且由于我猜如果我们不从js函数返回任何内容,它将自动返回undefined?因此,我相信上面的所有函数都返回未定义。
关于这个,我有两个问题,
不从函数返回任何东西是一种不好的做法吗?
如果要改进此代码,您会提出什么建议?
答案 0 :(得分:3)
是和否
这取决于情况。
如果您正在使用方法来更改基于状态的应用程序中的状态,则不从函数中返回任何内容也没有错。在这种情况下,优先级是完成action
而不是处理数据。您基本上是说“嘿,应用程序,这已经改变了!重新渲染!”
但是,如果您发现自己处理的数据(数组或对象)不是状态的一部分,并且由于没有报告action
,那么最好遵循functional programming paradigm,而不是变异该数据,而是创建具有相同数据类型的新实体,然后填充并返回它。
答案 1 :(得分:1)
当您问到可以在该代码中进行哪些改进时,我建议将for (let j=0; j<data[i]["peaks"].length; j++)
替换为for (let j of data[i]["peaks"])
,我认为这是遍历数组的更好形式。
答案 2 :(得分:1)
不,很好。
唯一的建议是尝试在数组上使用.map
而不是三重for循环和推入,但是说实话,您看起来还不错。
答案 3 :(得分:0)
根据specifications,“如果未返回值,则函数返回未定义。” 要回答您的问题:
1)“不从函数返回任何东西是一种不好的做法吗?”否。返回undefined
的函数可以被视为其他语言中的“过程”,即,一个子程序可能会产生一些副作用,但不会返回任何值。
2)“如果要改进此代码,您会提出什么建议?”与返回undefined
的函数无关。