Javascript 将字符串转换为函数名
学习是母语。正在尝试将字符串转换为函数名。出现错误,提示“func不是函数。func未定义”。需要帮忙吗。最终目标是创建具有背景色和用于增加/减少RGB值的按钮的视图Javascript 将字符串转换为函数名,javascript,react-native,Javascript,React Native,学习是母语。正在尝试将字符串转换为函数名。出现错误,提示“func不是函数。func未定义”。需要帮忙吗。最终目标是创建具有背景色和用于增加/减少RGB值的按钮的视图 const [red, setRed] = useState(0); const [green, setGreen] = useState(0); const [blue, setBlue] = useState(0); const setColor = (color, change) => { /
const [red, setRed] = useState(0);
const [green, setGreen] = useState(0);
const [blue, setBlue] = useState(0);
const setColor = (color, change) => {
// color === "red", "green", "blue"
// change === +10, -10
const colorCapitalized = color.charAt(0).toUpperCase() + color.slice(1);
var stateMethod = 'set' + colorCapitalized;
var func = window[stateMethod];
if (color + change > 255 || color + change < 0) {
return;
} else {
func(color + change);
}
};
const[red,setRed]=useState(0);
const[green,setGreen]=useState(0);
const[blue,setBlue]=useState(0);
常量setColor=(颜色,更改)=>{
//颜色==“红色”、“绿色”、“蓝色”
//变化==+10,-10
const colorCapitalized=color.charAt(0.toUpperCase()+color.slice(1);
var stateMethod='set'+彩色大写;
var func=窗口[stateMethod];
如果(颜色+变化>255 | |颜色+变化<0){
返回;
}否则{
func(颜色+变化);
}
};
避免使用窗口
对象(或一般的全局对象)。您当然不能将其用于局部变量,如设置的等
如果确实希望这样做,请将函数放在对象上:
const setters = {
red: setRed,
green: setGreen,
blue: setBlue
};
然后使用color
对其进行索引:
const setter = setters[color];
setter(color + change);
甚至
setters[color](color + change);
您也可以对这些值执行相同的操作。然后您的setColor
就变得简单多了(特别是如果我们只做一次计算并重用结果):
const[red,setRed]=useState(0);
const[green,setGreen]=useState(0);
const[blue,setBlue]=useState(0);
常数设置器={
红色:设置为红色,
格林:赛特格林,
蓝色:蓝色
};
常量值={
红色
绿色
蓝色
};
常量setColor=(颜色,更改)=>{
常数更新=值[颜色]+变化;
如果(update>=0&&update如何包装setter
// do you really need the `color` arg?
const clamped = ([value, setter]) => [value, (color, change) => {
let w = value + change;
if(w >= 0 && w < 255) setter(value = w);
}];
const [red, setRed] = clamped(useState(0));
const [green, setGreen] = clamped(useState(0));
const [blue, setBlue] = clamped(useState(0));
//您真的需要'color'参数吗?
常量钳制=([value,setter])=>[value,(color,change)=>{
设w=值+变化;
如果(w>=0&&w<255)设置器(值=w);
}];
常数[red,setRed]=钳制(useState(0));
常数[green,setGreen]=钳制(useState(0));
常数[blue,setBlue]=钳制(useState(0));
您好,Crowder先生,我有一个问题,一般来说,我使用firebase存储来保存图像,我只是从选择器中获取一个照片URI,并将其保存为image.jpg“这样做对吗?@OliverD-我不知道。我建议用更多信息和您正在使用的代码充实它,然后作为问题发布。
// do you really need the `color` arg?
const clamped = ([value, setter]) => [value, (color, change) => {
let w = value + change;
if(w >= 0 && w < 255) setter(value = w);
}];
const [red, setRed] = clamped(useState(0));
const [green, setGreen] = clamped(useState(0));
const [blue, setBlue] = clamped(useState(0));