Use forms with or without client-side JavaScript--no code duplication required!
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

71 行
1.4 KiB

  1. import * as React from 'react';
  2. import * as Iceform from '@modal-sh/iceform-next';
  3. const GreetPage: Iceform.NextPage = ({
  4. req,
  5. res,
  6. }) => {
  7. const {response, ...isoformProps} = Iceform.useResponse(res);
  8. const [responseData, setResponseData] = React.useState<unknown>();
  9. React.useEffect(() => {
  10. response?.json().then((responseData) => {
  11. setResponseData(responseData);
  12. });
  13. }, [response]);
  14. return (
  15. <div>
  16. <h1>Iceform</h1>
  17. <h2>
  18. Request
  19. </h2>
  20. <h3>Query</h3>
  21. <pre>
  22. {JSON.stringify(req.query)}
  23. </pre>
  24. {typeof req.body !== 'undefined' && (
  25. <>
  26. <h3>Body</h3>
  27. <pre>
  28. {JSON.stringify(req.body)}
  29. </pre>
  30. </>
  31. )}
  32. <h2>
  33. Response
  34. </h2>
  35. {typeof res.body !== 'undefined' && (
  36. <pre>
  37. {JSON.stringify(res.body)}
  38. </pre>
  39. )}
  40. {typeof responseData !== 'undefined' && (
  41. <pre>
  42. {JSON.stringify(responseData)}
  43. </pre>
  44. )}
  45. <Iceform.Form
  46. {...isoformProps}
  47. method="post"
  48. action="/a/greet"
  49. clientAction="/api/greet"
  50. >
  51. <input
  52. type="text"
  53. name="name"
  54. />
  55. <button
  56. type="submit"
  57. >
  58. Submit
  59. </button>
  60. </Iceform.Form>
  61. </div>
  62. );
  63. };
  64. export const getServerSideProps = Iceform.destination.getServerSideProps();
  65. export default GreetPage;