先看看 react blog, 看官方怎么說的
In React blog post:
URLs starting with javascript: are a dangerous attack surface because it’s easy to accidentally include unsanitized output in a tag like <a href> and create a security hole.
In React 16.9, this pattern continues to work, but it will log a warning. If you use javascript: URLs for logic, try to use React event handlers instead.
我們在使用 a 標簽時,href
屬性可以用於指定超鏈接目標的 URL,其值可以使任何有效文檔的相對的或絕對的 URL,包括片段標識符和 JavaScript 代碼段。用戶選擇了 a 標簽中的內容,瀏覽器會嘗試檢索並展示 href 屬性指定的 url 所表示的文檔,或者 執行 JavaScript 表達式、方法和函數的列表。
若用戶不想用 a 標簽的跳轉能力時,而要使用自己綁定的 click 事件,往往會通過插入 js 代碼段的方式,設置 href 值為javascript:;
或javascript:void(0)
以期達到 href 無跳轉的效果。但是這樣寫代碼會被 react 在控制台報如下錯誤:
console: A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed "javascript:;"
解決辦法:屬性值使用#
或者#!
before:
<a href="javascript:;" onClick={() => this.handleComment(record, true)}>{intl.get('COMMON_MODIFY')}</a>
after modified:
<a href="#!" onClick={() => this.handleComment(record, true)}>{intl.get('COMMON_MODIFY')}</a>