我正在尝试使用 NextJS 应用程序自行托管网络字体,但遇到了麻烦。这是浏览器尝试访问这些字体的 URL:
localhost:3000/_next/static/css/fonts/Avenir.woff2
Run Code Online (Sandbox Code Playgroud)
实际路径是:
_project_dir/static/fonts/Avenir.woff2
Run Code Online (Sandbox Code Playgroud)
我尝试将链接包含在 _app.js 中,它确实下载了字体,但文本仍然没有样式。
localhost:3000/_next/static/css/fonts/Avenir.woff2
Run Code Online (Sandbox Code Playgroud)
这是我的_app.js:
render() {
const { Component, pageProps } = this.props;
return (
<Container>
<link href="https://fonts.googleapis.com/css?family=Poppins:500,500i,600&display=swap" rel="stylesheet" />
<link rel="preload" as="font" href="/static/fonts/Avenir.woff2" type="font/woff2" crossorigin />
<link rel="preload" as="font" href="/static/fonts/AvenirHeavy.woff2" type="font/woff2" crossorigin />
<Head>
<title>Project</title>
</Head>
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<Component pageContext={this.pageContext} {...pageProps} />
</PersistGate>
</Provider>
</Container>
);
}
}
Run Code Online (Sandbox Code Playgroud)
我的main.css
_project_dir/static/fonts/Avenir.woff2
Run Code Online (Sandbox Code Playgroud)
和我的next.config.js:
<link rel="preload" as="font" href="/static/fonts/Avenir.woff2" type="font/woff2" crossorigin />
Run Code Online (Sandbox Code Playgroud) 我正在尝试将“全选”/“取消全选”添加到 React Antd 的“SELECT”组件中。
我的代码
const models = ['A4', 'A6', 'A8', 'A1', 'Q3', 'Q5'];
const [selected, setSelected] = useState({
models: [],
});
console.log('selected', selected);
const handleModelSelect = (option) => {
if (option === 'all') {
if (selected.models.length === models.length) {
setSelected((prev) => ({ ...prev, models: [] }));
} else {
setSelected((prev) => ({ ...prev, models }));
}
} else {
setSelected((prev) => ({ ...prev, models: uniq([...prev.models, option]) }));
}
};
return
(<Form>
<Form.Item
name="model"
style={{ display: 'inline-block', width: 'calc(33% - …Run Code Online (Sandbox Code Playgroud) 我有两种字体,我试图向用户显示,而没有 FOIT,相反,我有一个 FOUT,我希望用户不要在每次重新访问页面时重新下载字体。
我添加了字体观察器来添加额外的 FOUT 回退功能。_document.js
componentWillMount() {
if (process.browser) {
const html = document.documentElement;
html.classList.add('fonts-loading');
const fontPoppins = new FontFaceObserver('Poppins');
fontPoppins.load(null, 5000).then(() => {
console.log('Poppins font has loaded.');
html.classList.remove('fonts-loading');
html.classList.add('fonts-loaded');
}).catch(() => {
html.classList.remove('fonts-loading');
html.classList.add('fonts-failed');
});
const fontAvenir = new FontFaceObserver('Avenir');
fontAvenir.load(null, 5000).then(() => {
console.log('Avenir font has loaded.');
}).catch(() => {
html.classList.remove('fonts-loading');
html.classList.add('fonts-failed');
});
}
}
... (more code here)
render ( code here ) ...
// Additional FOUT?
<Head>
<link
href="https://fonts.googleapis.com/css?family=Poppins:200,300,400,600,700,800,900&display=swap"
rel="preload"
as="font"
/>
... (more code …Run Code Online (Sandbox Code Playgroud) 由于一些奇怪的原因,我收到此错误: raw cannot be resolved or is not a field
我正在尝试做以下事情
MediaPlayer click = MediaPlayer.create(this, R.raw.button_click.mp3);
Run Code Online (Sandbox Code Playgroud)
在我的onCreate方法中.
我已经检查过文件夹和mp3文件了,就是这样<project-name>/raw/button_click.mp3.我试过了:
请帮忙!
我想知道如何水平对齐我的按钮?最重要的是,我想在这些按钮上添加文字.这就是我现在拥有的.
HTML正文部分:
<body>
<div class="tile_div">
<table class="tile_table">
<tr>
<td>
<img class="tile_image" height="50px" width="100px" src="./images/button_left.png"/>
<p class="tile_p">Button one</p>
</td>
<td>
<img class="tile_image" height="50px" width="100px" src="./images/button_left.png"/>
<p class="tile_p">Button two</p>
</td>
<td>
<img class="tile_image" height="50px" width="100px" src="./images/button_left.png"/>
<p class="tile_p">Button three</p>
</td>
</tr>
</table>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
CSS:
.tile_image {
float: left;
margin: 0px;
}
.tile_image img {
position:absolute;
}
.tile_p {
text-align:center;
position:relative;
}
Run Code Online (Sandbox Code Playgroud)
看起来如何:http: //img580.imageshack.us/img580/8867/uo7i.png
我希望文本位于不在它们下面的按钮中间.
编辑:
好吧,所以当我使用
src="./images/button_left.png"图像看起来它应该看起来:
http://img580.imageshack.us/img580/8867/uo7i.png
Run Code Online (Sandbox Code Playgroud)
但是当我使用背景图像时会发生这种情况:http: //img580.imageshack.us/img580/6127/yz4.png
什么是替换文本的最有效方法:)->。
因此,假设我有一个类似“ Hello :)我叫亚历克斯”的文字。我应该将文本转换为“你好,我叫亚历克斯”
我在lodash实用程序库的帮助下解决了这个问题。
const replaceStringWithEmoji = (string) => {
const emojiMap = {
':)': '',
':(': '',
':D': '',
';(': '',
':O': '',
';)': '',
'8)': '',
'>:@': '',
};
const emojis = [...Object.keys(emojiMap)];
return _.join(_.map(_.split(string, ' '), (s) => {
if (_.includes(emojis, s)) {
return emojiMap[s];
}
return s;
}), ' ');
};
Run Code Online (Sandbox Code Playgroud)
必须有一种更好的方法。也许与正则表达式?
短期回报
return _.join(_.map(_.split(string, ' '), s => _.includes(emojis, s) ? emojiMap[s] : s), ' ');
Run Code Online (Sandbox Code Playgroud) 在 NextJs(启用 SSR)应用程序上注册路由更改事件时遇到问题。我在 GTM 中使用历史更改事件触发器。
使用react-gtm-module初始化 Google 标签管理器。
问题:事件在装载时触发,路线例如。www.site.com/product/123 但是当我从页面 /product/123/ 导航到像 /product/124/ 这样的页面时,事件不会触发。
产品页面:
return (
<div>
<div>{props.title}</div>
<Link href="/product/[pid]" as={`/product/124`}>
<a>Another product (should trigger event here, but doesn't)</a>
</Link>
</div>
)
Run Code Online (Sandbox Code Playgroud)
我曾尝试将此添加到 _app.js (componentDidMount)
import Router from 'next/router';
...
componentDidMount () {
...
if (process.browser) {
Router.onRouteChangeComplete = url => {
window.history.pushState({}, document.title, url);
};
}
Run Code Online (Sandbox Code Playgroud)
在 NextJs 中这样做的正确方法是什么?
我为Android编写了一个简单的问答游戏,目前我在问题显示后没有出现问题,我不想让它两次问我同样的问题.
这是我使用的方法
private void QBegin() {
/*
* Gets a random question
*/
question = (TextView) findViewById(R.id.question);
String[] types = { "Question one",
"Question two",
"Question three",
"Question four",
"Question five"};
Random random = new Random();
int qType = random.nextInt(types.length);
question.setText(types[qType]);
getAnswers(qType); //gets four answers
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否可行但是,如果我添加类似的东西怎么办?
编辑:不起作用..
int i = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(qType);
i++;
if(list.contains(qType) && i != types.length + 1){
return;
} else {
answerCounter.setText("Hit the bricks pal, you're done..");
}
Run Code Online (Sandbox Code Playgroud)
编辑2:被告知添加这样的东西,但我没有想法我现在应该做什么...
ArrayList<Integer> list …Run Code Online (Sandbox Code Playgroud)