在React中将一个数组中的值分配给另一个数组

时间:2017-12-13 22:40:12

标签: javascript reactjs ecmascript-6 state

我有以下状态结构:

var newData = this.state.items.slice(); //copy array
this.setState({
    ...this.state,
    data: { ...this.state.data, tags: newData }
});

当我提交数据时,我正在尝试为items数组分配items数据。

newData

tags包含所有变量,但console.log(this.state.data.tags, this.state.items); 始终为空。 如何将完全相同的值分配给标签数组?

这是我的控制台日志:

onSubmit = (e) => {
     e.preventDefault();
     const errors = this.validate(this.state.data);
     this.setState({ errors });
     if (Object.keys(errors).length === 0) {
       this.setState({ loading: true });
       this.setState(prevState => ({
          data: {
             ...prevState.data,
             tags: prevState.items
           }
       }));
       console.log(this.state.data.tags, this.state.items);
       this.props
         .submit(this.state.data)
         .catch(err =>
            this.setState({ errors: err.response.data.errors, loading: false })
          );
       }
   };

enter image description here

更新

<?php
  mysql_connect("localhost", "root", "");
  mysql_select_db("hospital");
  $user = $_GET['username'];
  $pass = $_GET['password'];

  $query = "SELECT * FROM receptionist WHERE nama_receptionist = '$user'";

  $hasil = mysql_query($query);
  $data  = mysql_fetch_array($hasil);

  $password = $data['password'];


  if ($pass == $password) $response = "TRUE";
  else $response = "FALSE";

  header('Content-Type: text/xml');
  echo "<?xml version='1.0'?>";
  echo "<data>";
  echo "<response>".$response."</response>";
  echo "</data>";


  ?> 

1 个答案:

答案 0 :(得分:2)

当您设置状态时,您不会将当前状态传播到您正在传递的对象中。 setState接收对象作为其第一个参数,更新该对象中的键。所以,例如,如果我们有:

this.state = {
  a: 1,
  b: 2
};

使用此:

this.setState({
  b: 3
});

只会更新ba不会受到影响。另请注意,setState是异步的 - 并且不能保证在setState内引用状态是安全的。因此,React为您提供了一个回调以访问以前的状态:

this.setState(prevState => ({
  data: { 
    ...prevState.data, 
    tags: prevState.items
  } 
}));

这只会更新状态中的data对象,而只更新tag属性,使用之前的状态items数组。