项目作者: viankakrisna

项目描述 :
Reusable Fetch component, implementing fetch
高级语言: JavaScript
项目地址: git://github.com/viankakrisna/fetch-component.git
创建时间: 2017-02-21T23:49:51Z
项目社区:https://github.com/viankakrisna/fetch-component

开源协议:

下载


fetch-component

npm install --save fetch-component

or

yarn add fetch-component

Usage:

  1. import React from 'react'
  2. import Fetch from 'fetch-component'
  3. function Hello () {
  4. return (
  5. <div>
  6. <h1>Hello from React</h1>
  7. <Fetch url={'https://api.github.com/user/repos'}>
  8. {data => <p>{data.message}</p>}
  9. </Fetch>
  10. </div>
  11. )
  12. }
  13. export default Hello

Advanced usage

You can find it in the demo folder

  1. import React from 'react';
  2. import { render } from 'react-dom';
  3. import Fetch from 'fetch-component';
  4. const Box = props => (
  5. <div style={{ float: 'left', width: `${100 / 4}%` }}>
  6. {props.children}
  7. </div>
  8. );
  9. const AsyncList = props => (
  10. <Fetch
  11. onLoading={() => <p>Loading...</p>}
  12. onSuccess={data => (
  13. <ul>
  14. {data.map(post => (
  15. <li key={post.id}>
  16. {post.title}
  17. </li>
  18. ))}
  19. </ul>
  20. )}
  21. onError={(error, reload) => (
  22. <div>
  23. <p>
  24. Error!
  25. </p>
  26. <pre>
  27. {error.message}
  28. </pre>
  29. <button onClick={e => reload(props)}>Reload?</button>
  30. </div>
  31. )}
  32. {...props}
  33. />
  34. );
  35. let Demo = props => (
  36. <div>
  37. <Box>
  38. <h1>onSuccess</h1>
  39. <AsyncList url={'https://jsonplaceholder.typicode.com/posts'} ></AsyncList>
  40. </Box>
  41. <Box>
  42. <h1>onError</h1>
  43. <AsyncList
  44. url={'https://jsonplaceholder.typicode.com/poss'}
  45. onError={(error, reload) => (
  46. <div>
  47. <p>
  48. Error!
  49. </p>
  50. <pre>
  51. {error.message}
  52. </pre>
  53. <button
  54. onClick={e =>
  55. reload({
  56. ...props,
  57. url: 'https://jsonplaceholder.typicode.com/posts',
  58. })}
  59. >
  60. Reload?
  61. </button>
  62. </div>
  63. )}
  64. />
  65. </Box>
  66. <Box>
  67. <h1>onLoading</h1>
  68. <AsyncList ></AsyncList>
  69. </Box>
  70. <Box>
  71. <h1>With Children</h1>
  72. <AsyncList url={'https://jsonplaceholder.typicode.com/posts'}>
  73. {data => <pre>{JSON.stringify(data, null, 2)}</pre>}
  74. </AsyncList>
  75. </Box>
  76. </div>
  77. );
  78. render(<Demo ></Demo>, document.querySelector('#demo'));