小编Ric*_*ick的帖子

将对象存储在React组件的状态中?

是否可以将对象存储在React组件的状态中?如果是,那么我们如何使用setState?更改该对象中键的值?我认为在语法上不允许写下这样的东西:

this.setState({ abc.xyz: 'new value' });
Run Code Online (Sandbox Code Playgroud)

在类似的方面,我还有另一个问题:在React组件中有一组变量是否可以在组件的任何方法中使用它们,而不是将它们存储在一个状态中?

您可以创建一个包含所有这些变量的简单对象,并将其放置在组件级别,就像在组件上声明任何方法一样.

它很可能遇到这样的情况,即在代码中包含大量业务逻辑,并且需要使用许多变量,这些变量的值由多个方法更改,然后根据这些值更改组件的状态.

因此,您只需保留那些值应直接反映在UI中的变量,而不是将所有这些变量保留在状态中.

如果这种方法比我在这里写的第一个问题更好,那么我不需要在状态中存储一个对象.

javascript reactjs

66
推荐指数
6
解决办法
8万
查看次数

如何解决不是所有代码路径都返回值的问题?

我在尝试解决的代码中有错误。我认为它需要一个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)

javascript typescript tslint

15
推荐指数
5
解决办法
3万
查看次数

如何在WebView中添加JavaScript函数,稍后在提交reCAPTCHA时从HTML调用它

我在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调用它.我怎样才能做到这一点?

javascript android recaptcha webview android-webview

10
推荐指数
2
解决办法
2507
查看次数

使用JavaScript切换特定文本无法按预期工作

我有一个切换按钮,可以改变一些文本.我遇到的问题是,如果我有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)

html javascript css editor toggle

6
推荐指数
1
解决办法
303
查看次数

从键/值对创建复杂对象

我有一个具有键/值对的文件.此文件在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)

javascript node.js docker

6
推荐指数
1
解决办法
247
查看次数

Chrome 地址栏在移动网站上留下空白

我的移动网站上的 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)

其他网络浏览器在移动设备上运行良好,我该怎么做才能摆脱地址栏空白?

html javascript css jquery google-chrome

5
推荐指数
1
解决办法
5507
查看次数

TypeScript 没有 window.eval()

在 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>标签加载的一些其他代码。

javascript eval typescript

5
推荐指数
1
解决办法
2189
查看次数

从 React Redux Thunk 返回承诺

我有下一个 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)

javascript reactjs redux redux-thunk react-redux

5
推荐指数
1
解决办法
4041
查看次数

为什么测量的div宽度与浏览器测量值不同?

我有一个小工具来尝试几个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)

html javascript css jquery flexbox

5
推荐指数
1
解决办法
126
查看次数

在一个屏幕上反应原生的两个抽屉

我有一个应用程序需要能够使用两个抽屉导航器,一个在标题的左侧和右侧。

我现在可以用滑动手势打开两个抽屉,但是我需要能够以编程方式打开它。我发现该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 android ios react-native react-navigation

3
推荐指数
1
解决办法
6231
查看次数