是否可以将对象存储在React组件的状态中?如果是,那么我们如何使用setState?更改该对象中键的值?我认为在语法上不允许写下这样的东西:
this.setState({ abc.xyz: 'new value' });
Run Code Online (Sandbox Code Playgroud)
在类似的方面,我还有另一个问题:在React组件中有一组变量是否可以在组件的任何方法中使用它们,而不是将它们存储在一个状态中?
您可以创建一个包含所有这些变量的简单对象,并将其放置在组件级别,就像在组件上声明任何方法一样.
它很可能遇到这样的情况,即在代码中包含大量业务逻辑,并且需要使用许多变量,这些变量的值由多个方法更改,然后根据这些值更改组件的状态.
因此,您只需保留那些值应直接反映在UI中的变量,而不是将所有这些变量保留在状态中.
如果这种方法比我在这里写的第一个问题更好,那么我不需要在状态中存储一个对象.
我在尝试解决的代码中有错误。我认为它需要一个return语句,但我已经在forEach循环之外,但它仍然抛出错误:
not all the code path return the value
Run Code Online (Sandbox Code Playgroud)
如何修复下面的代码?
main.ts:
private ValidateRequestArgs(str) {
let ret: boolean = true;
// here on val its throwing tslint error not all code paths return value
str.split(',').forEach((val) => {
if (!ret) {
return false;
}
if (List.indexOf(val) > -1) {
ret = true;
} else {
ret = false;
}
});
return ret;
}
Run Code Online (Sandbox Code Playgroud) 我在WebView中添加了一个JavaScript函数(Kotlin):
val webView = findViewById(R.id.webview) as WebView
webView.getSettings().setJavaScriptEnabled(true)
webView.addJavascriptInterface(this, "android")
webView.getSettings().setBuiltInZoomControls(false)
webView.loadUrl(url)
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
super.onPageFinished(view, url)
webView.loadUrl("javascript:(function captchaResponse (token){" +
" android.reCaptchaCallbackInAndroid(token);" +
" })()")
}
}
Run Code Online (Sandbox Code Playgroud)
该函数工作正常,但问题是它在WebView中添加它时会立即运行.我只想将它作为JavaScript函数包含在内,只有当用户填写reCAPTCHA时才能从HTML调用它.我怎样才能做到这一点?
我有一个切换按钮,可以改变一些文本.我遇到的问题是,如果我有2个单词,并且我想要更改一个单词的文本,但是当我切换它时,样式将从两个跨度而不是所选文本的跨度中删除.
如何从选定的特定文本中删除范围并将范围保留在其他文本上?
function headuppercase(e) {
tags('span', 'sC');
}
function tags(tag, clas) {
var ele = document.createElement(tag);
ele.classList.add(clas);
wrap(ele);
}
function wrap(tags) {
var el = document.querySelector('span.sC');
sel = window.getSelection();
if (!el) {
if (sel.rangeCount && sel.getRangeAt) {
range = sel.getRangeAt(0);
}
document.designMode = "on";
if (range) {
sel.removeAllRanges();
sel.addRange(range);
}
range.surroundContents(tags);
} else {
var parent = el.parentNode;
while (el.firstChild) parent.insertBefore(el.firstChild, el);
parent.removeChild(el);
}
document.designMode = "off";
}Run Code Online (Sandbox Code Playgroud)
.ourbutton {
padding: 5px;
float: left;
font-variant: small-caps;
}
.container {
width: …Run Code Online (Sandbox Code Playgroud)我有一个具有键/值对的文件.此文件在process.envvia Docker中加载.但是出于开发目的,我手动加载它,所以最后它们是相同的;
配置:
process.env['ccc.logger.winston.level']='info';
process.env['ccc.logger.winston.transports.type.file']='File';
process.env['ccc.logger.winston.transports.filename']='logs/testOne.log';
process.env['ccc.logger.winston.transports.rotate']='false';
process.env['ccc.logger.winston.transports.type.file']='File';
process.env['ccc.logger.winston.transports.filename']='logs/testTwo.log';
process.env['ccc.logger.winston.transports.rotate']='true';
Run Code Online (Sandbox Code Playgroud)
我的期望是拥有这个目标:
{
"ccc": {
"logger": {
"winston": {
"level": "info",
"transports": [
{
"type": "File",
"filename": "logs/testONE.log",
"rotate": true
},
{
"type": "File",
"filename": "logs/testTWO.log",
"rotate": false
}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经提出了可行的解决方案,但如果我有一个对象数组,我遇到了问题,就像上面的例子一样:
循环所有键/值的函数和调用函数来创建对象:
let ENV_FROM_DOCKER = process.env;
for (let property in ENV_FROM_DOCKER) {
let checkForShallowProperties = property.split(".")[1];
if (typeof checkForShallowProperties === 'undefined') {
continue;
}
let resultObject = this.expand(property, ENV_FROM_DOCKER[property]););
emptyConfig = merge(emptyConfig, resultObject);
let stop; …Run Code Online (Sandbox Code Playgroud) 我的移动网站上的 Google Chrome 地址栏出现问题。我的网站上有一个固定的导航栏,目前我向下滚动并且地址栏消失,当我打开菜单时,底部出现一个空白(地址栏的大小),我需要向上滚动才能使地址栏出现,从而消除了空白。这是我的菜单 CSS:
#menu {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
z-index: 10000;
padding: 0;
background-color: blue;
overflow-x: hidden;
overflow-y: auto;
}
Run Code Online (Sandbox Code Playgroud)
其他网络浏览器在移动设备上运行良好,我该怎么做才能摆脱地址栏空白?
在 JavaScript 中我可以这样做:
window.eval(userInput)
Run Code Online (Sandbox Code Playgroud)
在客户端.js文件中没有任何问题。
但在 TypeScript 中,window.eval()不存在。我收到错误:
property eval does not exist on type window
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我想使用的原因eval()是执行一些用户创建的代码。该eval调用必须在全局范围内完成,因为用户代码依赖于我之前已经使用<script>标签加载的一些其他代码。
我有下一个 React/Redux/Thunk 代码:
这是我对 API 的调用:
//api.js
export const categoriesFetchData = (page, parentOf) => {
return axios.get(
url +
'categories/' +
'?parent=' +
parentOf +
'&limit=10' +
'&offset=' +
(page - 1) * 10,
);
};
Run Code Online (Sandbox Code Playgroud)
这是我的动作(我假装从这个动作返回一个 axios 承诺):
//actions.js
export const subCategoriesFetchData = (page = 1, parentOf) => {
return dispatch => {
dispatch(oneCategoryLoading(true));
return api.categoriesFetchData(page, parentOf)
.then(response => {
dispatch(subCategoriesFetchDataSuccess(response.data.results));
dispatch(oneCategoryLoading(false));
})
.catch(error => {
console.log(error);
});
};
};
Run Code Online (Sandbox Code Playgroud)
在我的容器中:
const mapDispatchToProps = dispatch => {
return { …Run Code Online (Sandbox Code Playgroud) 我有一个小工具来尝试几个flexbox参数.它可以在flexbox容器中添加和删除div,然后使用jQuery显示这些添加元素的宽度.但是测量的宽度与我在浏览器检查器中测量的宽度不同.
使用"加号"和"减号"按钮,可以添加元素.第一个元素的宽度应该是正确的,但是后面的元素被错误地测量.这里发生了什么?
function getWidth() {
// true: include margins
var v = parseFloat($(this).outerWidth(true)).toFixed(2);
var span = '<span>Width: ' + v + '</span>';
console.log(v);
$(this).html(span);
}
$(document).ready(function() {
// Initialize.
var items = 3;
var itemsDiv = '<div class="item">';
var HTML = '';
for (var i = 0; i < items; i++) {
HTML += itemsDiv + 'Item ' + i + '</div>';
}
$('.container').html(HTML)
var adjustment;
// Add / remove items
// Always keep at least one flex item.
$('input[name="build"]').click(function() …Run Code Online (Sandbox Code Playgroud)我有一个应用程序需要能够使用两个抽屉导航器,一个在标题的左侧和右侧。
我现在可以用滑动手势打开两个抽屉,但是我需要能够以编程方式打开它。我发现该navigation.openDrawer()功能仅适用于其中一个抽屉,而不适用于另一个,因为它只能使用我的抽屉导航器中的一个导航道具(以先到者为准)。
以下是我的渲染功能:
const LeftStack = createStackNavigator(
{
LeftDrawerStack
},
{
navigationOptions: ({navigation}) => ({
headerLeft: (
<TouchableOpacity onPress={() => navigation.openDrawer()}>
<Icon style={{marginLeft: 10}} name='menu'/>
</TouchableOpacity>
)
})
}
);
const RightStack = createStackNavigator(
{
RightDrawerStack
},
{
navigationOptions: ({navigation}) => ({
headerRight: (
<TouchableOpacity onPress={() => navigation.openDrawer()}>
<Icon style={{marginRight: 10}} name='ios-bulb'/>
</TouchableOpacity>
)
})
}
);
export const RouteStack = createStackNavigator(
{
screen: LoginScreen,
navigationOptions: ({navigation}) => ({
header: null
}),
LeftStack,
RightStack
}
);Run Code Online (Sandbox Code Playgroud)
这是我的抽屉路线:
javascript ×10
css ×3
html ×3
android ×2
jquery ×2
reactjs ×2
typescript ×2
docker ×1
editor ×1
eval ×1
flexbox ×1
ios ×1
node.js ×1
react-native ×1
react-redux ×1
recaptcha ×1
redux ×1
redux-thunk ×1
toggle ×1
tslint ×1
webview ×1