提问者:小点点

如何用useEffect React Native保存数组


我想用react UseEffect保存数组数据。 以类为例:

async componentDidMount() {
  const users = await AsyncStorage.getItem('users');

  if (users) {
   this.setState({ users: JSON.parse(users) });
  }
 }

 componentDidUpdate(_, prevState) {
  const { users } = this.state;

  if (prevState.users !== users) {
   AsyncStorage.setItem('users', JSON.stringify(users));
  }
 }

如何用React钩子实现逻辑?



共2个答案

匿名用户

对于ComponentDidMount逻辑,可以使用UseEffect钩子:

useEffect(() => {
  const asyncFetch = async () => {
    const users = await AsyncStorage.getItem("users");
    if (users) {
      // setter from useState
      setUsers(JSON.parse(users));
    }
  };
  asyncFetch();
}, []);

对于ComponentDidMount,请将UseEffect与dep数组和UserEf引用一起使用。

const prevUsers = useRef();
useEffect(() => {
  const prevUsers = prevUsers.current;

  // Some equal check function
  if (!areEqual(prevUsers, users)) {
    AsyncStorage.setItem("users", JSON.stringify(users));
  }

  prevUsers.current = users;
}, [users]);

请注意,在当前代码中,prevstate.users!==users总是truley,比较两个对象,在JS中{}!=={}总是得到true

匿名用户

您可以尝试如下所示,您可以在基于函数的组件中使用钩子,而不是在基于类的组件中使用钩子

//state declaration similar to class based component
const [usersdata,setUsers] = useState([]); 

const users = await JSON.parse(AsyncStorage.getItem('users')); 

//whenever the value of users changes useEffect will reset the value of users in state useEffect handle the lifecycle in function based component
useEffect(()=>{
      if(users){
         setUsers(JSON.parse(users));
      }
},[users])