react经验(react总结)

react经验(react总结)use server export default async function requestUsern formData const username formData get username if canRequest username return amp lsquo

大家好,我是讯享网,很高兴认识大家。



‘use server’;

export default async function requestUsername(formData) {
 const username = formData.get(‘username’);
 if (canRequest(username)) {
   // …
   return ‘successful’;
 }
 return ‘failed’;
}

<form onSubmit={search}>
 <input name=“query” />
 <button type=“submit”>Search</button>
</form>

“use server”

const submitData = async (userData) => {
   const newUser = {
       username: userData.get(‘username’),
       email: userData.get(‘email’)
   }
   console.log(newUser)
}
const Form = () => {
   return <form action={submitData}>
       <div>
           <label>Name</label>
           <input type=“text” name=‘username’/>
       </div>
       <div>
           <label>Name</label>
           <input type=“text” name=“email” />
       </div>
     
<button type=‘submit’>Submit</button>
   </form>
}

export default Form;

import React, { useEffect } from ‘react’;

const HeadDocument = ({ title }) => {
 useEffect(() => {
   document.title = title;

 const metaDescriptionTag = document.querySelector(‘meta[name=“description”]’);
   if (metaDescriptionTag) {
   metaDescriptionTag.setAttribute(‘content’, ‘New description’);
   }
 }, [title]);

 return null;
};

export default HeadDocument;

Const HomePage = () => {
 return (
   <>
     <title>Freecodecamp</title>
     <meta name=“description” content=“Freecode camp blogs” />
     // 页面内容
   </>
 );
}

import React, { useState, useMemo } from ‘react’;

function ExampleComponent() {
 const [inputValue, setInputValue] = useState(‘’);

 // 缓存检查输入值是否为空的结果
 const isInputEmpty = useMemo(() => {
   console.log(‘检查输入是否为空…’);
   return inputValue.trim() === ‘’;
 }, [inputValue]);

 return (
   <div>
     <input
       type=“text”
       value={inputValue}
       onChange={(e) => setInputValue(e.target.value)}
       placeholder=“输入一些内容…”
     />
     <p>{isInputEmpty ? ‘输入为空’ : ‘输入不为空’}</p>
   </div>
 );
}

export default ExampleComponent;

import React, { useState } from ‘react’;

function ExampleComponent() {
 const [inputValue, setInputValue] = useState(‘’);

 const isInputEmpty = () => {
   console.log(‘检查输入是否为空…’);
   return inputValue.trim() === ‘’;
 });

 return (
   <div>
     <input
       type=“text”
       value={inputValue}
       onChange={(e) => setInputValue(e.target.value)}
       placeholder=“输入一些内容…”
     />
     <p>{isInputEmpty ? ‘输入为空’ : ‘输入不为空’}</p>
   </div>
 );
}

export default ExampleComponent;

import React, { forwardRef } from ‘react’;

const ExampleButton = forwardRef((props, ref) => (
 <button ref={ref}>
   {props.children}
 </button>
));


讯享网

import React from ‘react’;

const ExampleButton = ({ ref, children }) => (
 <button ref={ref}>
   {children}
 </button>
);

const value = use(resource);

import { use } from “react”;

const fetchUsers = async () => {
   const res = await fetch(‘https://jsonplaceholder.typicode.com/users');
   return res.json();
 };
 
 const UsersItems = () => {
   const users = use(fetchUsers());
 
   return (
     <ul>
       {users.map((user) => (
         <div key={user.id} className=’bg-blue-50 shadow-md p-4 my-6 rounded-lg‘>
           <h2 className=’text-xl font-bold‘>{user.name}</h2>
           <p>{user.email}</p>
         </div>
       ))}
     </ul>
   );
 };
export default UsersItems;

import { createContext, useState, use } from ’react‘;

const ThemeContext = createContext();

const ThemeProvider = ({ children }) => {
 const [theme, setTheme] = useState(’light‘);

 const toggleTheme = () => {
   setTheme((prevTheme) => (prevTheme === ’light‘ ? ’dark‘ : ’light‘));
 };

 return (
   <ThemeContext.Provider value={{ theme, toggleTheme }}>
     {children}
   </ThemeContext.Provider>
 );
};

const Card = () => {
 // use Hook()
 const { theme, toggleTheme } = use(ThemeContext);

 return (
   <div
     className={p-4 rounded-md ${<br>        theme === &#39;light&#39; ? &#39;bg-white&#39; : &#39;bg-gray-800&#39;<br>      }}
   &gt;
     &lt;h1
       className={my-4 text-xl ${<br>          theme === &#39;light&#39; ? &#39;text-gray-800&#39; : &#39;text-white&#39;<br>        }}
     &gt;
       Theme Card
     &lt;/h1&gt;
     &lt;p className={theme === ’light‘ ? ’text-gray-800‘ : ’text-white‘}&gt;
      Hello!! use() hook
     &lt;/p&gt;
     &lt;button
       onClick={toggleTheme}
       className=’bg-blue-500 hover:bg-blue-600 text-white rounded-md mt-4 p-4‘
     &gt;
       {theme === ’light‘ ? ’Switch to Dark Mode‘ : ’Switch to Light Mode‘}
     &lt;/button&gt;
   &lt;/div&gt;
 );
};

const Theme = () =&gt; {
 return (
   &lt;ThemeProvider&gt;
     &lt;Card /&gt;
   &lt;/ThemeProvider&gt;
 );
};

export default Theme

const { pending, data, method, action } = useFormStatus();

const { status } = useFormStatus()

import { useFormStatus } from “react-dom”;

function Submit() {
 const status = useFormStatus();
 return &lt;button disabled={status.pending}&gt;{status.pending ? ’正在提交…‘ : ’提交‘}&lt;/button&gt;;
}

const formAction = async () =&gt; {
 // 模拟延迟 2 秒
 await new Promise((resolve) =&gt; setTimeout(resolve, 3000));
}

const FormStatus = () =&gt; {
 return (
   &lt;form action={formAction}&gt;
     &lt;Submit /&gt;
   &lt;/form&gt;
 );
};

export default FormStatus;

const [state, formAction] = useFormState(fn, initialState, permalink?);

import { useFormState} from ’react-dom‘;

const FormState = () =&gt; {
   const submitForm = (prevState, queryData) =&gt; {
       const name =  queryData.get(“username”);
       console.log(prevState); // 表单之前的状态
       if(name === ’john‘){
           return {
               success: true,
               text: “欢迎”
           }
       }
       else{
           return {
               success: false,
               text: “错误”
           }
       }
   }
   const [ message, formAction ] = useFormState(submitForm, null)
   return &lt;form action={formAction}&gt;
       &lt;label&gt;姓名&lt;/label&gt;
       &lt;input type=“text” name=“username” /&gt;
       &lt;button&gt;提交&lt;/button&gt;
       {message && &lt;h1&gt;{message.text}&lt;/h1&gt;}
   &lt;/form&gt;
}

export default FormState;

const [ optimisticMessage, addOptimisticMessage] = useOptimistic(state, updatefn)

import { useOptimistic, useState } from “react”;

const Optimistic = () =&gt; {
 const [messages, setMessages] = useState([
   { text: “嘿,我是初始的!”, sending: false, key: 1 },
 ]);
 const [optimisticMessages, addOptimisticMessage] = useOptimistic(
   messages,
   (state, newMessage) =&gt; [
     …state,
     {
       text: newMessage,
       sending: true,
     },
   ]
 );

 async function sendFormData(formData) {
   const sentMessage = await fakeDelayAction(formData.get(“message”));
   setMessages((messages) =&gt; […messages, { text: sentMessage }]);
 }

 async function fakeDelayAction(message) {
   await new Promise((res) =&gt; setTimeout(res, 1000));
   return message;
 }

 const submitData = async (userData) =&gt; {
   addOptimisticMessage(userData.get(“username”));

   await sendFormData(userData);
 };

 return (
   &lt;&gt;
     {optimisticMessages.map((message, index) =&gt; (
       &lt;div key={index}&gt;
         {message.text}
         {!!message.sending && &lt;small&gt; (正在发送…)&lt;/small&gt;}
       &lt;/div&gt;
     ))}
     &lt;form action={submitData}&gt;
       &lt;h1&gt;OptimisticState 钩子&lt;/h1&gt;
       &lt;div&gt;
         &lt;label&gt;用户名&lt;/label&gt;
         &lt;input type=“text” name=“username” /&gt;
       &lt;/div&gt;
       &lt;button type=“submit”&gt;提交&lt;/button&gt;
     &lt;/form&gt;
   &lt;/&gt;
 );
};

export default Optimistic;

const [messages, setMessages] = useState([{ text: “嘿,我是初始的!”, sending: false, key: 1 },]);

{optimisticMessages.map((message, index) =&gt; (
       &lt;div key={index}&gt;
         {message.text}
         {!!message.sending && &lt;small&gt; (正在发送…)&lt;/small&gt;}
       &lt;/div&gt;
     ))}

小讯
上一篇 2025-04-27 20:50
下一篇 2025-05-16 20:36

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/198815.html