如何将空数组放入模板字符串

时间:2019-05-13 19:55:29

标签: javascript reactjs react-hooks

我想创建一个为我生成一些反应代码的函数

这是我的函数,它需要一个对象并为我创建一堆useState()钩子

var fromStateToHook = (obj) => {
    return Object.entries(obj).reduce((acc, [key,value]) => {
        return [...acc, [`const [${key}, 
        set${key.slice(0,1).toUpperCase() + key.slice(1)}] = useState('${value}');`]];
    }, []).join("\n")
}

当我这样使用

copy(fromStateToHook( {
    images: [],
}))

我找回

const [images, setImages] = useState('');

我想得到这个

const [images, setImages] = useState([]);

是否可以将数组放入模板字符串中?

3 个答案:

答案 0 :(得分:2)

需要按照您期望的方式对数组进行“字符串化”。假设它是一维数组,Array.join会做到

const numbers = [1, 2, 3, 4];
const template = `useState([${numbers.join(',')}])`
console.log(template); // useState([1,2,3,4])

答案 1 :(得分:1)

您可能会使用JSON.stringify

set${key.slice(0,1).toUpperCase() + key.slice(1)}] = useState(${JSON.stringify(value)});`]];

这实际上取决于您要如何打印值(转换为文本)。如果您的需求更加复杂,则必须针对该值提出一个自定义字符串化机制。

答案 2 :(得分:0)

您确定确实需要为此生成代码吗?您也可以只创建自己的钩子:

  function useStates(obj) {
    const result = {};
    for(const [key, value] of Object.entries(obj)) {
      const [stored, setter] = useState(value);
      result[key] = stored;
      result["set" + key[0].toUpperCase() + key.slice(1)] = setter;
    }
   return result;
 }

 const { images, setImages, names, setNames } = useStates({ images: [], names: [] });