簡體   English   中英

使用表單標簽時React.js'意外令牌'<

[英]React.js 'Unexpected token' < when using form tag

我一直在使用帶有babel,webpack,redux和語義UI反應的mern堆棧制作一個Web應用程序。

但是我說錯了

bundle.js中的“意外令牌<”。

僅當我發送請求單擊表單標記中的按鈕時,才會發生此錯誤。 如果我制作的頁面沒有表單標簽,則可以正常工作而不會出現任何錯誤。

這是我在React中的代碼。

handleUpload(title, contents, userId) {
  return this.props.createPostRequest(title, contents, userId).then(
    () => {
      if(this.props.post.status === 'SUCCESS') {
        alert('Your post is saved successfully.');
        browserHistory.push('/');
        return true;
      } else {
        alert('Save Fail: ' + this.props.post.failReason);
        return false;
      }
    }
  );
}

render() {
  return(
    <div className="Write">
      <br/>
      <br/>
      <Form>
        <Container text>
          <Form.Input label='Title' fluid name='title' placeholder='title'
            value={this.state.title} onChange={this.handleChange}>
            <input/>
          </Form.Input>
          <Form.TextArea rows='20' name='contents' placeholder='Write here!'
            value={this.state.contents} onChange={this.handleChange}>
            <textarea/>
          </Form.TextArea>
          <br/>
          <Button.Group>
            <Button color='orange' as={Link} to='/'>Cancel</Button>
            <Button.Or/>
            <Button positive onClick={this.handleUpload}>Save</Button>
          </Button.Group>
        </Container>
      </Form>
    </div>
  );
}

當我鍵入字母並單擊“保存”按鈕時,我會看到一條警告消息,內容為

您的帖子已成功保存。

我輸入的數據也保存在mongodb中。 但是,單擊“確定”后,URL從'localhost:3000/post/write ”更改為“ localhost:3000/post/write?title=blah&contents=blah ”。 等等是我在輸入標簽中放的東西。 然后控制台說

意外令牌<。

但是,如果我在上面的代碼中不使用form標簽,它就可以正常工作,我完全不知道這是怎么回事。Form標簽來自語義UI反應。 所以我需要。 如果我不使用Form,它將很好用,但是我應該放棄語義UI提供的設計。

有誰知道這個嗎? 我想這與表單標簽中的HTTP POST有關,在服務器端處理來自該表單標簽的發布請求之后,這使React.js難以理解index.html中的bundle.js。

TL; DR

handleSubmit = (e) => e.preventDefault()

<Form onSubmit={this.handleSubmit} />

為什么?

默認情況下,HTML表單將在提交時向當前URI發出GET請求,請參見此處 同樣默認情況下,表單中的按鈕將提交它:

http://codepen.io/levithomason/pen/RpEwWP

<form onsubmit="alert('submitted!')">
  <button>I'll submit</button>
  <button>Me too</button>
</form>

發生的事情是,React呈現了一個<form /> ,其中包含一些<button /> ,當您單擊它們時,它正在使用表單數據向當前URI發出GET請求。

我敢打賭,我敢打賭,正在為您的應用提供服務的本地服務器沒有處理程序來接受此請求。 更進一步,我敢打賭,它還有一個回退功能,可以響應未知請求使用index.html響應。 對於單頁應用程序來說,允許應用程序的軟路由器而不是服務器來處理路由是很平常的事。 這可能導致您對bundle.js的請求實際上接收到index.html ,因此出現了意外的令牌。

既然您已經說過:

...如果我在上述代碼中未使用表單標簽,則可以正常工作...

只需阻止表單提交即可為您解決。

在中使用.map<div> 標簽-react.js</div><div id="text_translate"><p> 我真的很感激任何幫助。 所以該項目是一個反應項目。</p><p> 這是我獲取<a href="https://i.stack.imgur.com/WelCP.png" rel="nofollow noreferrer">的內容:獲取請求</a></p><p>這是我從服務器響應的內容: <a href="https://i.stack.imgur.com/e2QG3.png" rel="nofollow noreferrer">Response from server</a></p><p> 我試了一下 Postman,看看我收到的是什么類型的 json。 這是它返回的內容: <a href="https://i.stack.imgur.com/yg6IE.png" rel="nofollow noreferrer">Postman 測試</a></p><p>我遇到的問題是我無法 map 收到的數據。 一旦輸入鏈接,我只想在首頁上以一種很好的方式顯示接收到的數據。</p><p> 是否可以將 map 放在 div 標簽內? 或者還有另一種方法嗎?</p><p> <em><strong>請注意該項目是作為功能組件編寫的</strong></em></p></div>

[英]Using .map in <div> tag - react.js

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 SyntaxError:React.js中的意外令牌&lt; componentDidMount 意外令牌錯誤 [React.js] React.js 給出了意外的令牌 React.js 語法錯誤:意外的令牌 通過在React.js中創建文件上載來獲取奇怪的意外令牌 Radium for React.js內聯樣式意外的令牌錯誤? SyntaxError Unexpected token &lt; in JSON at position 0 in react.js API 導航 React.js-babel-loader-意外令牌 在中使用.map<div> 標簽-react.js</div><div id="text_translate"><p> 我真的很感激任何幫助。 所以該項目是一個反應項目。</p><p> 這是我獲取<a href="https://i.stack.imgur.com/WelCP.png" rel="nofollow noreferrer">的內容:獲取請求</a></p><p>這是我從服務器響應的內容: <a href="https://i.stack.imgur.com/e2QG3.png" rel="nofollow noreferrer">Response from server</a></p><p> 我試了一下 Postman,看看我收到的是什么類型的 json。 這是它返回的內容: <a href="https://i.stack.imgur.com/yg6IE.png" rel="nofollow noreferrer">Postman 測試</a></p><p>我遇到的問題是我無法 map 收到的數據。 一旦輸入鏈接,我只想在首頁上以一種很好的方式顯示接收到的數據。</p><p> 是否可以將 map 放在 div 標簽內? 或者還有另一種方法嗎?</p><p> <em><strong>請注意該項目是作為功能組件編寫的</strong></em></p></div> 意外的字符 &#39;⇒&#39; React.js
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM