将useState与[]和不与之一起使用,以及与{}一起使用时的区别

严吉米

大家好,我有两个关于react.js钩子的问题。请帮忙。几天就弄糊涂了:(
1.在useState()中使用[]和不使用[]有什么区别,
我注意到当使用useState([])时,console.log(array)就像

(100) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]

但是,当我在代码中使用useState()时,它将类似于以下内容,并且无法使用array.length,将出现错误消息:“无法读取未定义的属性长度”

Array(100)
0: {id: "181913649", name: "Drake Hotline Bling", url: "https://i.imgflip.com/30b1gx.jpg", width: 1200, height: 1200, …}
1: {id: "112126428", name: "Distracted Boyfriend", url: "https://i.imgflip.com/1ur9b0.jpg", width: 1200, height: 800, …}
2: {id: "87743020", name: "Two Buttons", url: "https://i.imgflip.com/1...
.
.

2.此外,何时在useState({})中使用{}?我确实知道{}是对象。请举一些例子:(

以下是主要代码App.js:

function App() {
  const [array,setarray]=useState([])

  useEffect(()=>{
    fetch("https://api.imgflip.com/get_memes")
      .then(response => response.json())
      .then(response => {
          const {memes} = response.data
          console.log(memes[0].url)

          setarray(memes)
          
      })
  },[])
  console.log(array)
  console.log(array[0])
  console.log(array.length)
  
  return (
    <div>
      <Header />
      <Control data={array}/>
    </div>
  );
}

export default App;
Matias Kinnunen

如果您在useState()未传递参数的情况下进行调用,则状态变量(array的初始值为undefined试图读取该属性lengtharray(即array.length),那么将会给出一个错误:

const [array, setArray] = useState()

console.log(array) //=> undefined
console.log(array.length) //=> Uncaught TypeError: Cannot read property 'length' of undefined

如果调用useState([]),即传递一个空数组作为参数,则状态变量(array的初始值将是一个空数组([])。试图读取该属性lengtharray(即array.length),然后将做工精细:

const [array, setArray] = useState([])

console.log(array) //=> []
console.log(array.length) //=> 0

如果您以后要设置array一个数组,并且useEffect()确实要这样做,则将初始值设置为一个空数组是一个好习惯。然后,您可以放心地将array视为数组,即不必检查它是否undefined为数组。

同样,{}如果您的状态稍后将成为对象,则可能希望将其用作初始值。这对于防止错误很有用。例如:

const [obj, setObj] = useState()

console.log(obj) //=> undefined
console.log(obj.length) //=> Uncaught TypeError: Cannot read property 'length' of undefined
console.log(Object.entries(obj)) //=> Uncaught TypeError: Cannot convert undefined or null to object

// versus

const [obj, setObj] = useState({})

console.log(obj) //=> {}
console.log(obj.length) //=> undefined
console.log(Object.entries(obj)) //=> []

obj.length可能没有多大意义,但这只是一个例子。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将statsmodels与pyinstaller一起使用时出错

将ngMaterial与ngRoute一起使用时出错

将sklearn的BaggingClassifier与GridSearchCV一起使用时的ZeroDivisionError

将fnAddData与数据顺序一起使用时出错

将RxJava与Room一起使用时循环播放

将表别名与SqlExpressionSelectFilter一起使用时丢失

为什么与DateTime一起使用时Convert.ChangeType(string)不与DateTimeOffset一起使用?

将SharedElementTransition与recyclerView一起使用时出错

将Laravel Forge与Bitbucket一起使用时的问题

将pynput与pyinstaller一起使用时出现错误

Laravel独特不与where()和分页一起使用

将FutureBuilder与本地JSON一起使用时出错

将Bean验证与焊接一起使用时的ClassCastException

与不同的http请求一起使用时,“保存”和“更新”之间的区别

将argv与函数一起使用时出错

将Express会话与Express一起使用时出错

将Objectify与GAE一起使用时,ObjectifyService的NoClassDefFoundError

将AutoMapper与异步方法一起使用时出错

将RabbitMQ与Logstash一起使用时丢失消息

将SparkJob与NamedRddSupport一起使用时出错

将Chromium与Fedora一起使用时的安全警告

将cout与指针值一起使用时出错

$and 不与 $lte 和 $gte 一起使用

将 ScrollChor 与 NavItem 一起使用时出错

将 scanf() 与“%c”一起使用时的前导空格

cbind 与 index 一起使用时与变量名相比有什么区别

将fabricjs与nodejs一起使用时的Gebbrich字母

将 File 与 ImagePicker Flutter 一起使用时出错

将 .next() 与 takeUntil 一起使用时的参数