代码之家  ›  专栏  ›  技术社区  ›  johndodo

如何检查React中是否从public/dir添加了资产?

  •  0
  • johndodo  · 技术社区  · 7 年前

    是否可以检查文件是否存在于 /public/ 目录?

    我有一组与某些物体相对应的图像。如果可用,我想使用 <img> 标签。但是,并不是所有的对象都有相应的映像,在这种情况下,我想对我们的服务器执行一个REST请求。

    作为构建过程的一部分,我可以创建一个文件列表,但如果可能的话,我希望避免这样做。

    我正在使用 create-react-app fs

    编辑 :我想我应该更准确地回答我的问题-我知道客户端JS不能访问这些信息(除了通过HTTP请求),我只是希望某些东西能够以客户端Javascript可以访问的方式保存有关可用文件的信息(在构建过程中)。。。也许网页包或一些扩展可以做到这一点?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Rohith Murali    7 年前

    通过将相对路径设置到相应的images文件夹,可以使用axios实现这一点。我这样做是为了得到一个 json file . 你可以用同样的方法来解决问题 image file ,您可以参考 these 示例

    注意:如果您已经将baseurl的axios实例设置为不同域中的服务器,则必须使用部署web应用程序的静态文件服务器的完整路径。

      axios.get('http://localhost:3000/assets/samplepic.png').then((response) => {
                console.log(response)
            }).catch((error) => {
                console.log(error)
            })
    

    如果找到图像,响应将为200,如果没有,响应将为404。

    编辑:另外,如果图像文件存在于src中的assets文件夹中,您可以执行 require

    var SampleImagePath = require('./assets/samplepic.png');
    axios.get(SampleImagePath).then(...)
    
        2
  •  1
  •   Sasha Kos    7 年前

    首先,您应该记住任何web应用程序的客户机-服务器体系结构。如果您正在使用 create-react-app 您正在通过 webpack-dev-server . 因此,您应该考虑如何为生产托管文件。最常见的方法是:

    • 节点

    但是有很多其他的方法取决于你的堆栈。

    Web包开发服务器 如果您将使用apache2/nginx,并且将它们配置为允许直接访问文件,则可以直接请求文件。例如,您的文件在公共路径中

    class MyImage extends React.Component {
       constructor (props) {
           super(props);
    
           this.state = {
               isExist: null
           }
       }
    
       componentDidMount() {
           fetch(MY_HOST + '/public/' + this.props.MY_IMAGE_NAME)
              .then(
                  () => {
                      // request status is 200
                      this.setState({ isExist: true })
                  },
                  () => {
                      // request is failed
                      this.setState({ isExist: false })
                  }
              );
       }
    
       render() {
           if (this.state.isExist === true) {
               return <img src={ MY_HOST + "/public/" + this.props.MY_IMAGE_NAME }/>
           }
    
           return <img src="/public/no-image.jpg"/>
       }
    }