Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串转换为函数名_Javascript_React Native - Fatal编程技术网

Javascript 将字符串转换为函数名

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) => { /

学习是母语。正在尝试将字符串转换为函数名。出现错误,提示“func不是函数。func未定义”。需要帮忙吗。最终目标是创建具有背景色和用于增加/减少RGB值的按钮的视图

  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));